DEV Community

Cover image for Pitch me on Go
Ben Halpern
Ben Halpern Subscriber

Posted on

Pitch me on Go

Part of a new series! Feel welcome to dip in and weigh in on a past question.

Let's say I've never used Golang before. Can anyone give the run down of what the language does and why you prefer it? Feel free to touch on drawbacks as well.

Latest comments (38)

Collapse
 
joelbonetr profile image
JoelBonetR 🥇
can be learned in a day

Image description

Collapse
 
cpustejovsky profile image
Charles Clinton Pustejovsky III • Edited

Most if not all languages can be used to be build distributed microservices. With it's focus on package oriented design and concurrency primitives, Go was actually made to build distributed systems. Given how much companies need to scale, it makes Go an excellent tool in their arsenal.

Go also has made the brave decision to remove powerful abstractions like inheritance, function overloading, etc. These may be nice, but they can often bite us in the ass later, and I don't think any developer is trustworthy enough to not to abuse them, especially when they're on a deadline and it's a Friday afternoon.

I think Go is amazing for problems dealing with I/O and where a long term solution is needed.

It may not be the best option for something where you need to be as memory efficient as possible.

Also, as much as I dislike NodeJS, I'd use it over Go for prototyping. An opinionated, statically typed language isn't great for throwing together a disposable prototype.

Collapse
 
dominikbraun profile image
DB • Edited

Go being learnable in a day is a huge misconception about the language. Basic syntax yes, but it takes months to figure out proper package- and project structures.

Collapse
 
codewander profile image
Anon

Why so long?

Thread Thread
 
dominikbraun profile image
DB

The language is very opinionated on how to implement things - for example, reading a file or running a web server. There's only one way to do this in Go.

But Go is very un-opionionated when it comes to your code layout and project structure: There is no "default structure", you can create packages as you want, you create files as you want, you can place multiple types and functions within a single file, you can define interfaces inside the package that uses the interface or inside the package that provides the concrete implementation of the interface...

It just takes a time to figure out how to properly structure the code. Go is very liberal in this concern and each project should use a structure that fits best.

Thread Thread
 
codewander profile image
Anon • Edited

Why is it unopinionated on how to organize types and functions within modules?

Thread Thread
 
dominikbraun profile image
DB

In other languages, say, Java, you'd create a file Order.java for your Order class. There's no such convention in Go. You can create a file called order.go containing an Order type, but other types, constants and functions may also be in that file. Go simply doesn't have any restrictions regarding the code structure, and that allows for the best-fitting solution for your use case on the one side but also many possibilities each with their own pros and cons on the other side.

Thread Thread
 
codewander profile image
Anon

Thanks.

I was more curious about why the leadership is opinionated about error handling, but isn't as opinionated about module conventions.

I understand that in both functional and procedure languages, there is a much larger degree of freedom in how you group together items inside of modules. I haven't done a lot of c programming, but I assume it has very well established patterns for organizing modules by now.

Collapse
 
drsensor profile image
૮༼⚆︿⚆༽つ • Edited
  • Fast compile. In fact time of running go run is on par with JIT-ed scripting language like Javascript (node/deno) or Python
  • Unlike scripting language, it produce static binary (though the size is still bigger than Rust, C++, or Zig)
  • Beware of dependency that interop with C or static library (FFI). It can give you bottlenock caused by cgo. There is several solution for this like using gccgo or converting C code via c2go. Those will remove the bottleneck but it's not always works (depend on the dependency you use or C code you want to convert)
  • Coming from Python? Check out Go+
Collapse
 
acoh3n profile image
Arik • Edited

Probably my favorite thing about Go is that it's lacking features. While just about every other language is competing for feature parity with other languages, Go seems to be true to keeping to its original philosophy of simplicity over a bunch of features. This makes for code that is generally quite readable and understandable by others because there aren't ten thousand ways to do every thing.

Collapse
 
denisgolius profile image
Denys Holius

There are very few libraries for ML and AI... So Python/Scala/C++ and maybe Julia are the most usable for now.

Collapse
 
mrwormhole profile image
Talha Altınel • Edited

well that's easy: Look at the motto "Go will make you love programming again, we promise"

I was easily lost after the burnouts with 7-8 different+bloated languages and hostile communities. If you don't follow CoC of Go, you are not counted as a Go developer. The community and fhe founders of the language made a huge difference and a fresh start in my whole life.

Collapse
 
leob profile image
leob

They've FINALLY added generics ... :)

 
codewander profile image
Anon • Edited

I have worked in scala and haskell. I haven't used elixir or clojure at work. I used the expression "coming from" to refer to the general perspective of those communities.

Thread Thread
 
aceix profile image
the_aceix

Sorry, that means earning some good money

Collapse
 
calinzbaenen profile image
Calin Baenen

Is Rust gonna be ðe next in your series? :þ

Some comments may only be visible to logged-in visitors. Sign in to view all comments.