What Is It?
Go is a statically-typed, general-purpose, compiled programming language. It also gets called "GoLang" because that was the original domain name for the language, but its real name it Go. It’s fairly easy to learn, so you can get started quickly. It’s also quite high level, so it’s easy to be productive with it.
When Should I Use It? And When Shouldn’t I Use It?
You should use it when you want something written quickly, like a one-off piece of custom software, a proof of concept, or an MVP for a start-up. One of the big advantages it has is that you can compile and cross-compile it for a LOT of different operating systems, including Windows, MacOS, Linux, Android and iOS. (https://go.dev/doc/install/source#environment and https://freshman.tech/snippets/go/cross-compile-go-programs/)
I'm not sure of anywhere you SHOULDN'T use it, although some of the features it's missing might weigh against it.
What Do You Mean by "Features It's Missing"?
Collections and Iterators
If you use lots of different types of collections and iterators in your work, you might find those provided with Go restricted. Go gives you four main collection types: Arrays of fixed size, arrays of variable size (slices), maps and channels. Channels are really a communications link, so the articles I've read calling them "collection types" are, frankly, pushing it. The range operator lets you iterate over built-in collection types, but not custom types.
If you want any other collection or iterator types you're apparently free to write your own, and many people have. Like people had to in C++ before 1994. There are some good custom iterator libraries available, but I'm not convinced they should be needed. It looks like I'm not the only one to have noticed this; there's a movement to add iterators to the language starting with Go 1.22, (https://medium.com/eureka-engineering/a-look-at-iterators-in-go-f8e86062937c). It looks like it's progressing slowly, but at least it's progressing.
Maybe I've been spoiled, but I'm used to languages that let me set default values on parameters. C++, C# and Python all have this facility, but Go doesn't. You might think you can use function overloading instead, but Go doesn't allow that either.
It IS possible to implement default parameters, as long as you don't mind hideously complex hacks; if you have to hack things to that extent, you're fighting against the language, and that's generally bad.
How Do I Get Started?
Download the Go compiler for your operating system from the (Go Download and Install Page)[https://go.dev/doc/install].
You'll also need a development environment. You can use anything from a basic text editor and terminal, all the way through to a complete IDE. I use Visual Studio Code - https://code.visualstudio.com/download - and the "Go" plugin by the Go Team at Google.
Who Uses It?
Lots of people and organizations use Go – it’s apparently the most popular development language in the world at the moment.
Summary of Features
|What This Means In Practice
|Strongly-typed languages prevent you from assigning one type to another, and generally carry out a lot of error checking at compile time. Loose or weakly-typed languages carry out more checking at runtime.
|Strongly-typed languages will fail due to type errors during compilation, before they’re deployed. Loose or weakly-typed languages don’t fail until they’ve been deployed.
|The higher-level a language is, the abstract its instructions and concepts are from the actual low-level instructions that are actually run on the CPU.
|High-level languages generally let you do more with fewer statements, at the expense of some flexibility. On the other hand, if you want to do something that’s not included, you’ll probably have to write some code of your own.
|Compiled or Interpreted
|Compiled languages are converted once to executable binary code by a compiler. They are faster than interpreted languages, which are converted to binary code every time they are run.
But What Do You Really Think?
Go is can be very productive – you can put together complex systems from readily-available parts quite quickly. Performance is good, because the code gets compiled, and multithreading is simple to do so you can improve the performance even more.
I mentioned above that there are a few features that are missing in Go, but there are plenty of third party libraries that implement most of what you might need. It's important to remember that Go was never written to be a "great" language, it was designed to get developers producing software quickly even though they are "not capable of understanding a brilliant language" (https://www.youtube.com/watch?v=iTrP_EmGNmw from 00:20:40 onwards with some comments here).
Despite that level of condescension from one of its creators, Go is worth learning, especially if you're currently using something like Python and you want to move to a compiled language. It's a good general purpose language that's particularly good with networking and lets you make the most of multiple processors with multithreading. As long as you don't need to do any heavy-duty complex data processing using complex collections, you should be fine.