3 ms·
Picked up some Go. Still cannot for the life of me figure out why it's so popular (please don't reply with statically linked binaries)[1]. In the infrastructure
by meddlepal 8y ago
Picked up some Go. Still cannot for the life of me figure out why it's so popular (please don't reply with statically linked binaries)[1]. In the infrastructure and ops space it seems to be slowly eating Python (sadness). When in Rome, do as the Romans do.
[1] Such a benefit doesn't matter in a containerized world.
- bdibs 8y agoPerformance wise Go is worlds ahead of Python.
- meddlepal 8y agoSure, no strong disagreement there, but it doesn't matter for most operational and infrastructure tooling where the language and ecosystem really seems to have taken off. Hell it barely matters for most web services or apps once you factor in database or other IO latency. It does have a nifty concurrency system. I do like that most Go code is idiomatic because the language really kind of restricts you to writing it a certain way. I wish it had a less verbose way of dealing with errors... some kind of function composition along with better formalization of Go's multi-return (e.g. Try, Either types) would be nice... of course without generics that is likely tricky. I'm happy I can read and write it, but for my personal work I'll be sticking with some mix of Python and Java/Kotlin. I think in 2019 I'm going to really give Rust a shot.
- PhilippGille 8y agoGo 2 will get better error handling, error types and generics: https://go.googlesource.com/proposal/+/master/design/go2draft.md https://go.googlesource.com/proposal/+/master/design/go2draf...
- meddlepal 8y agoInteresting, thanks! But at the same time who knows how long it will be until Go 2 exists and even then the migration will be probably be longer than desired.
- sevagh 8y ago>[1] Such a benefit doesn't matter in a containerized world. Go is used for the tooling for deploying this containerized world. Let's take a look at some infra/ops tools written in Go: * Docker itself - should run on baremetal (duh) * Nomad, a container scheduler - should run on baremetal * Kubernetes, a container scheduler - should run on baremetal * Consul, service discovery - should run on baremetal * Etcd, service discovery - should run on baremetal When you actually work in ops, setting up the container conveyer belt by putting Go static binaries on Linux hosts - so that developers can go ahead, containerized their applications, and deploy them - is a big improvement over the Python days of yore.