If you were to write backend code for a startup or anything bigger than a sideproject, but not for system programming / infrastructure stuff, is there a case to be made to use Go over Kotlin / Java / .NET ? Is Go used in any large-scale business applications projects ?
In general, this made me wonder what kind of use cases exactly is Go targeting? For business logic, the Java / .NET ecosystem seems more mature, for system programming and low-level stuff, Rust is safer and more powerful
[0] https://www.techempower.com/benchmarks/#section=data-r21&test=composite
But I think the success of most projects is less to do with the language and more to do with people. You need a solid lead that will provide a clean architecture, enforce consistent coding patterns, interface with business to provide clear requirements, enforce code quality with PRs, etc. Otherwise it's garbage in, garbage out.
This style of application development benefits from an object-oriented language. Where an object encapsulates the domain logic of business rules. This can be accomplished in Go with structs and funcs.
Classes in Java make good domain models because of (overbearing) enforcement of file structure (object creation validation rules in the constructor, limit access to properties to getter/setter methods that can verify inputs before mutation, yadda yadda). In domain models, neatness and organization counts a lot for the long-term health of the code.
My opinion is that Go is well suited to the task of creating autonomous worker applications that enforce business logic rules for domain objects with well-defined borders. If your domain objects have overlapping concerns or you have actors/business rules that need access to more than one domain object for calculation/mutation you would be wise to think carefully about the application structure before selecting Go as your language.
A GC bottleneck is encountered when information processing frequency sustainably exceeds processing speed for long enough to encounter a problem. This is extremely unlikely to encounter in real world operation but easily produced during performance stress tests. I have found that I can send web socket messages up to 450,000 per second (on my laptop) with a total message processing frequency of about 60,000 per second. That means I can send messages fast than I can process them on the receiving end, which produces a storage problem. After about 450,000 messages message processing drops to a speed of about 300 per 5 seconds waiting on GC. Since this is a per socket problem I cannot imagine this ever becoming a real world problem. Nonetheless, I don’t suspect Go would have such a bottleneck.
Go key features were maintabilty and ease of coding new features or adaptations to new rules.
I'm coming from Java background and bank domain.
Edit: also Monzo is a bank using Go as backend