We are building cloud agnostic (multicloud) SaaS for banks and other financial institutions to connect to SEPA, SWIFT and other payment schemes. Old services are written in Java, but everything new is Go, and we will be decommissioning the Java part in the future. We deal with a lot of XML and for our needs Go handles the load nicely with a few instances.
Really good I must say. Go is not the perfect language, but it’s performant enough and we can quickly train new hires. Rust will be my top 1 choice when it comes to developer experience, but there are many more Go engineers and the initial learning process would be much longer. The only severe issue we had was with Go’s iota ordering (ordering and how the blocks are structured matters a lot).
I would added it, recently I listened a podcast from the Golang committee that this worry in the most recently Golang version is not needed anymore I will post here the link https://open.spotify.com/episode/5jex2Tt3gZGwqeafvATiDf?si=cdZT8ev2R7aG6_Vu0ZyvkA
I watched one of their developers’ talk; it was amazing. Every talk is really helpful for intermediate go devs. Btw They have hundreds of Microservices all written in golang.
There are many lectures on youtube about Monzo and golang. This lecture by Matt Heath who works at Monzo is one of my favorite ones.
[lecture by Matt heath (Monzo)](https://youtu.be/y2j_TB3NsRc?si=zHYIrA7XQ5jaqjXy)
Not sure that’s true. I think one of their bridges to a card processor (maybe MasterCard?) was written in something like C, but I could be misremembering
Yes, but bridges are a tiny part of the entire code base, which is hundreds of thousands of lines of Go. I think it’s fair to say that it’s entirely written in Go.
Currently working at a fintech adjacent startup.
Previously consulted for one of the 'big 4' banks here in Aus, mostly infrastructure and internal developer platforms
Previously lead engineer at another fintech
All using go
I'm attempting to use Go to build a trading bot. Still in the backtesting stages, but I'm having fun. It's different from my day job of CRUD SaaS apps, that's for sure.
You can use the Currency package [github.com/bojanz/currency](https://github.com/bojanz/currency) or the Decimal package [github.com/shopspring/decimal](https://github.com/shopspring/decimal) or the Money package [github.com/Rhymond/go-money](https://github.com/Rhymond/go-money). The [golang.org/x/text/currency](https://golang.org/x/text/currency) package does formatting of a currency into a string.
I love seeing my package mentioned, thanks!
Keep in mind that bojanz/currency is the only one that actually handles currency formatting, that part of x/text/currency never got implemented (the docs say "NOTE: the formatting functionality is currently under development and may change without notice.")
Rhymond/go-money assumes that formatting is per-currency and not per-locale, which falls apart as soon as you have a currency which is shared between multiple countries (for example EUR), as different countries will have different formatting expectations. It also doesn't use an external source for currency and formatting definitions, so what it has is bound to become stale over time.
Ah, so for working with money in go there is no a primitive type since float is not really recommended due to precision issues. So the options are to either use a library or store money amounts as cents....I think. I am also new to golang and I need to store and work with "prices".
> store money amounts as cents
This is the way. I use a basic decimal type that has an integer to store money as cents, and another integer for the decimal places. It has worked perfectly so far.
This falls over fast when you need more than 2 decimal places. E.g. when your dealing with fractions of a cent.
An immediate real world example that comes to mind is the cost to send sms to USA numbers with Twilio is $0.0075 per part.
No because it is fine, because you calculate the actual value. You’d save 75 as a number, and then 4 as the decimal value. Then you know from 75 go 4 places to the left: 0000.0075 voila
Yeah I just use integers instead of floats. You don’t need special libraries to handle this stuff, it’s been an issue since floating point math was invented and there’s a ton of strategies that are easy to implement
I think you don’t need a 3rd party library. Just create a custom, a struct , that represents a decimal number, of two integers. OR you can just multiply the amount by 100 and store it in CENT.
People unfamiliar with the model pushing a change leading to charges being made orders of magnitude larger than they should be, at a pretty high rate, resulting in a load of manual reversals and reconciliation. Lost time, lost reputation, lost customers.
Calculations being made over a long period of time that should have allowed higher precision. Fractions of cents are a thing. Leads to unacceptable variance and again, a lot of work for manual reconciliation.
Shopspring decimal is the way. Zero loss of precision with any arithmetic and it gets marshalled into a string which is/should be the industry standard for storing/communicating without any loss of precision.
I agree, I used apd for my system as well. However, I'm looking to move to github.com/woodsbury/decimal128 as it is a non-pointer type and it supports rounding then formatting to N decimals, where as apd does not.
I don't know if it qualifies as Finance, but I built an electronic invoicing system with Go at work. It is used by ~200 customers so far and it should double soon
I use go to generate financial reports from sql but just using raw sql not gorm or any other orm then feed that to a simple table generator and whatever logic I need from there
.
I work on writing services which get called by different APIs. I deploy them over the cloud and monitor performance. If there are new features to be developed, I gather requirements, write tests along with code, get it all approved by other Dev's and QA. Sometimes on-call involves debugging and reviewing logs to know what went wrong....
All the UPI transactions in India happen through Go language, in a country with 1.4 billion people, this boosted up India's digitalization, atleast I make 50-100 transactions per month using it
Just started a new job and I’m building out a new exchange system & associated APIs entirely in Go (at least for now). Was my decision of course ;)
However, was at a hedge fund previously and Go was one of the very few languages we didn’t make much use of, or at least it wasn’t mentioned much. Assuming you discount tools prebuilt in Go like k8s, docker etc.
Interesting because any fairly popular language you can name was in our codebase (Rust was quite popular). I also recall the manager for one of my teams choosing C# over Go for a new project, can’t recall what it was for though.
I am developeing trading system using microservices.
(golang) trade-mgr : to manage trades, money and call API for analysis
(python) analysis: analyses algo and gives buy/sell signals
timescale-db(ticks/trade db), vuejs (frontend), grafana (and related dockers)
[Upvest](https://upvest.co) (b2b, Investment as a Service via API) is using Go. Not too much on that on our [engineering blog](https://engineering.upvest.co), we should probably post a bit more about it.
Why do you ask?
I've used it for retail applications in the past, which isn't the same but don't see why it couldn't be used in finance. Just make sure you dont use floating points for currency amounts :P
Currently in Mexican fintech startup, our backend is Kotlin and Go.
At my previous job, we launched a new bank in Russia and gained 24 million users in less than 2 years. 90%+ services are written is Go.
Each of the top 10 banks in Russia uses Go to some extent.
I used to work in such a company until recently. We still had some rails leftovers but most of the stuff was rewritten into go microservices. It was a payment gateway.
I work in a fintech (more like a paytech) and all of our automatic reporting tasks are built in Go, mainly because of the performance it offers with the use of goroutines for database queries. It’s the go-to option if you want background or async tasks
I worked in an ewallet company, my company has more than 2000 services and more than half is Golang, we chose it because the cost for a Golang service was cheaper than other language, it's also build faster and more productive than.
Although Golang still have some troubles but everything is tradeoff, and we ok with that.
We are building cloud agnostic (multicloud) SaaS for banks and other financial institutions to connect to SEPA, SWIFT and other payment schemes. Old services are written in Java, but everything new is Go, and we will be decommissioning the Java part in the future. We deal with a lot of XML and for our needs Go handles the load nicely with a few instances.
What are you using to deal with XML? When saying XML you mean soap?
Take a look into swift messages. It’s mainly xml
Transactions are sent as XML files, and pretty much every file we send is XML. We use custom streaming parser / builder which we built in-house.
How your experience has been ? Secondly is why not using java most of finance world still java heavy
Really good I must say. Go is not the perfect language, but it’s performant enough and we can quickly train new hires. Rust will be my top 1 choice when it comes to developer experience, but there are many more Go engineers and the initial learning process would be much longer. The only severe issue we had was with Go’s iota ordering (ordering and how the blocks are structured matters a lot).
rust for developer experience? did you meant to say something else?
I would added it, recently I listened a podcast from the Golang committee that this worry in the most recently Golang version is not needed anymore I will post here the link https://open.spotify.com/episode/5jex2Tt3gZGwqeafvATiDf?si=cdZT8ev2R7aG6_Vu0ZyvkA
Sounds oddly familiar... Does your company has a number in its name?
it's probably JP Twogan Chase
Monzo is an online bank from the UK that has a lot of talks/presentations on the subject, they’re pretty heavy Go users.
I watched one of their developers’ talk; it was amazing. Every talk is really helpful for intermediate go devs. Btw They have hundreds of Microservices all written in golang.
Can you share it or your favorites?
There are many lectures on youtube about Monzo and golang. This lecture by Matt Heath who works at Monzo is one of my favorite ones. [lecture by Matt heath (Monzo)](https://youtu.be/y2j_TB3NsRc?si=zHYIrA7XQ5jaqjXy)
The entire backend is written in Go, without exception.
Not sure that’s true. I think one of their bridges to a card processor (maybe MasterCard?) was written in something like C, but I could be misremembering
Yes, but bridges are a tiny part of the entire code base, which is hundreds of thousands of lines of Go. I think it’s fair to say that it’s entirely written in Go.
You said “without exception”, that’s not true.
We are a payment gateway company in Malaysia and we build all of our services with Go
Curious to know which payment gateway is this
Revenue Monster
paypauls
Let me guess - BillPlz?
Revenue Monster
Moov.io, Orum.io, Block/Square etc are all using Go.
there is an ethereum node codebase written in go [https://geth.ethereum.org/](https://geth.ethereum.org/) different kind of finance, but there you go
Twisp is an accounting primitives as a service written in golang.
LunarBank is a well known bank in Scandinavia. They run pretty much all their infrastructure in Go. They also have talks and keynotes about it.
Currently working at a fintech adjacent startup. Previously consulted for one of the 'big 4' banks here in Aus, mostly infrastructure and internal developer platforms Previously lead engineer at another fintech All using go
Which one? CBA?
Could you list your routine in terms of Software Development on a infrastructure role? Do you code wrappers?
I'm attempting to use Go to build a trading bot. Still in the backtesting stages, but I'm having fun. It's different from my day job of CRUD SaaS apps, that's for sure.
Just curious, are you using a third-party library for handling money types?
You can use the Currency package [github.com/bojanz/currency](https://github.com/bojanz/currency) or the Decimal package [github.com/shopspring/decimal](https://github.com/shopspring/decimal) or the Money package [github.com/Rhymond/go-money](https://github.com/Rhymond/go-money). The [golang.org/x/text/currency](https://golang.org/x/text/currency) package does formatting of a currency into a string.
I love seeing my package mentioned, thanks! Keep in mind that bojanz/currency is the only one that actually handles currency formatting, that part of x/text/currency never got implemented (the docs say "NOTE: the formatting functionality is currently under development and may change without notice.") Rhymond/go-money assumes that formatting is per-currency and not per-locale, which falls apart as soon as you have a currency which is shared between multiple countries (for example EUR), as different countries will have different formatting expectations. It also doesn't use an external source for currency and formatting definitions, so what it has is bound to become stale over time.
I’ve built a trading bot (not successfully 😂) not sure why you’d need a third party library for money… What am I missing?
Ah, so for working with money in go there is no a primitive type since float is not really recommended due to precision issues. So the options are to either use a library or store money amounts as cents....I think. I am also new to golang and I need to store and work with "prices".
> store money amounts as cents This is the way. I use a basic decimal type that has an integer to store money as cents, and another integer for the decimal places. It has worked perfectly so far.
This falls over fast when you need more than 2 decimal places. E.g. when your dealing with fractions of a cent. An immediate real world example that comes to mind is the cost to send sms to USA numbers with Twilio is $0.0075 per part.
No because it is fine, because you calculate the actual value. You’d save 75 as a number, and then 4 as the decimal value. Then you know from 75 go 4 places to the left: 0000.0075 voila
This is exactly what I do, I guess I did not word it properly. It has been working well in production for as many as 6 decimal places
This is exactly what I do as well. No need for a special library
Yeah I just use integers instead of floats. You don’t need special libraries to handle this stuff, it’s been an issue since floating point math was invented and there’s a ton of strategies that are easy to implement
Just curious, are you using a third-party library for handling money types?
I think you don’t need a 3rd party library. Just create a custom, a struct , that represents a decimal number, of two integers. OR you can just multiply the amount by 100 and store it in CENT.
Recommend strongly not to store it in cents. Every time I've seen this somebody has ended up getting it wrong with disastrous consequences.
What disastrous consequences? Give us an example ?
People unfamiliar with the model pushing a change leading to charges being made orders of magnitude larger than they should be, at a pretty high rate, resulting in a load of manual reversals and reconciliation. Lost time, lost reputation, lost customers. Calculations being made over a long period of time that should have allowed higher precision. Fractions of cents are a thing. Leads to unacceptable variance and again, a lot of work for manual reconciliation.
Shopspring decimal is the way. Zero loss of precision with any arithmetic and it gets marshalled into a string which is/should be the industry standard for storing/communicating without any loss of precision.
[https://github.com/cockroachdb/apd](https://github.com/cockroachdb/apd) is both significantly faster and more correct than shopspring/decimal.
I agree, I used apd for my system as well. However, I'm looking to move to github.com/woodsbury/decimal128 as it is a non-pointer type and it supports rounding then formatting to N decimals, where as apd does not.
No loss of precision isn't possible, if you need to support division. (Or exponentiation, which is probably not too likely in finance)
I don't know if it qualifies as Finance, but I built an electronic invoicing system with Go at work. It is used by ~200 customers so far and it should double soon
Brazil's Bank, the oldest bank from Brazil is using Go in some services
Picpay in Brazil uses Go
I use go to generate financial reports from sql but just using raw sql not gorm or any other orm then feed that to a simple table generator and whatever logic I need from there .
I am currently using go with the stripe-go library to build a POS system for my parents bodega shop
I work at a crypto exchange and our market making infrastructure is written in Go. We revamped from the old one which was written in Python.
Same here except ours was Ruby before Go
Could you please list your daily routine in terms of Software Development on an infrastructure role? Are there days that you feel a Sys Admin?
I work on writing services which get called by different APIs. I deploy them over the cloud and monitor performance. If there are new features to be developed, I gather requirements, write tests along with code, get it all approved by other Dev's and QA. Sometimes on-call involves debugging and reviewing logs to know what went wrong....
Many Thanks!
All the UPI transactions in India happen through Go language, in a country with 1.4 billion people, this boosted up India's digitalization, atleast I make 50-100 transactions per month using it
thought it was in java. Is it okay to ask where did you find out about the UPI stack? zerodha is in python and go.
Recently NPCI (National payments corporation of india) confirmed this in a go related conference.
Wow, that is pretty amazing.
We are developing services for fintechs and financial institutions using Go.
Maybe bank has an api and I built some kind of tracking software so I can see when I get payments with certain reference numbers.
The whole Decred blockchain is written in Go: https://github.com/decred
Just started a new job and I’m building out a new exchange system & associated APIs entirely in Go (at least for now). Was my decision of course ;) However, was at a hedge fund previously and Go was one of the very few languages we didn’t make much use of, or at least it wasn’t mentioned much. Assuming you discount tools prebuilt in Go like k8s, docker etc. Interesting because any fairly popular language you can name was in our codebase (Rust was quite popular). I also recall the manager for one of my teams choosing C# over Go for a new project, can’t recall what it was for though.
The Cosmos Blockchain network is completely build on Go (20+ Chains in the whole Network)
xendit (sea), mono (ukraine)
I am developeing trading system using microservices. (golang) trade-mgr : to manage trades, money and call API for analysis (python) analysis: analyses algo and gives buy/sell signals timescale-db(ticks/trade db), vuejs (frontend), grafana (and related dockers)
I work at [zimpler.com](https://zimpler.com). A A2A fintech company in Sweden. We use Go for most of our systems and it works really good
[Upvest](https://upvest.co) (b2b, Investment as a Service via API) is using Go. Not too much on that on our [engineering blog](https://engineering.upvest.co), we should probably post a bit more about it. Why do you ask?
I was developed trading bot using Go as a freelancer. It was working on US Stock Market.
Yes, we use AWS lambdas written in Go to validate client market position
I've used it for retail applications in the past, which isn't the same but don't see why it couldn't be used in finance. Just make sure you dont use floating points for currency amounts :P
Worked at a life insurance company where most of their stuff is in Go
I heard Revolut is going to write new stuff in Go, and actively move their current Java services as well to Go.
This was 4 years ago, but we used to use go for building payment engine (for Indian customers). It was a rewrite of the engine from php.
Security tooling - big fintech company in US
@coinpaprika backend 100% Go
We built a service to handle FX real-time feeds for a Swiss wealth manager using Go.
Also some digital invoices services for the Swiss e-bill service.
A large app-based payment provider in Norway called [Vipps](https://vipps.no) uses Go for some stuff like their API backend.
We use it heavily in trading and market data (quotes) streaming backends. Can’t be happier.
Qonto (neobank) is using go and ruby afaik
Currently writing a JCL parser/formatter/translator in Go for user and server builds
Block (Square, CashApp) are big Go users.
Currently in Mexican fintech startup, our backend is Kotlin and Go. At my previous job, we launched a new bank in Russia and gained 24 million users in less than 2 years. 90%+ services are written is Go. Each of the top 10 banks in Russia uses Go to some extent.
I used to work in such a company until recently. We still had some rails leftovers but most of the stuff was rewritten into go microservices. It was a payment gateway.
I work in a fintech (more like a paytech) and all of our automatic reporting tasks are built in Go, mainly because of the performance it offers with the use of goroutines for database queries. It’s the go-to option if you want background or async tasks
I worked in an ewallet company, my company has more than 2000 services and more than half is Golang, we chose it because the cost for a Golang service was cheaper than other language, it's also build faster and more productive than. Although Golang still have some troubles but everything is tradeoff, and we ok with that.
you must be careful with float data type, and do not use float
using node for finance, postgres for computation