I used Go once, for a single small project, two years ago. Recently, I was forced to update the single dependency (acme/autocert) in the project due to bugs in it. But Go also had broken backwards compatibility during the last two years, so my project didn't work with the newest version of Go.
My project is a single main.go file. The Go website claimed they wouldn't break compatibility, which is why I tried using Go for the project. Regret.
@sunbather It refused to compile my project unless I turned it into a Go Module, and was directed to a manual on how to learn what Go Modules are and a bunch of philosophical stuff about Unix paths and environment variables and stuff.
My server was inaccessible due to a LetsEncrypt failure and revoked certs (not my fault.) I didn't have time for that BS.
@sunbather It needed to produce a binary that I could copy to another machine. 'go run' is not going to help.
@sunbather (afaik, anyway. The output binary that may or may not be produced by 'go run' is not suitable for moving out of the tmp directory where it's stored.)
@cancel I’m not familiar enough to know but I have a feeling it’s possible through some sort of go build arguments. At least it wasn’t incompatible syntax (though the result is the same)
@sunbather I'd have preferred editing code to being presented with a treatise on modular package management while my server is down.
@sunbather No, it's a server that runs persistently and listens on a socket, and needs to do a bunch of stuff with binary data. It's not appropriate for a script.
@sunbather (unless you mean there should have been some automated script to turn my thing into a module)
@sunbather yeah it needs acme/autocert (or equivalent) because it has to listen on HTTPS. And the thing it's integrating with doesn't allow self-signed certs (ugh) so I either have to use LetsEncrypt or I have to buy and renew a real SSL cert. LetsEncrypt was supposed to be hands off. Guess not!
@sunbather I have no problem handling SSL certs. I've done it for years. But I specifically tried LetsEncrypt here because I just wanted to set this server running and bother it as little as possible.
@cancel yes, I’m a junior on the front end team here at Coal Mine. things are getting dire. NPM and Yarn are killing each other in the pit, IE9 is supported for our biggest clients, I physically can’t breath, we’re forced to use dark theme (light theme would vaporize our team), and they got rid of the bidets this year.
changes are always annoying, but is not difficult to 'go' with modules.
(cd path of main.go)
go mod init wtf
go mod tidy
@cancel generics are good, making Go less bad: https://doma.dev/blog/innovation-propagation/#generic-go
The same thing happened to me too recently, and completely destroyed what little confidence and enthusiasm I had left for Go. Which is a shame, because channels were really cool.
That's true :)
I was impressed by named pipes and coroutines baked right into the language, but it really is a superficial thing. You're right: this stuff is possible in almost all languages.
@cancel you can disable modules: GO111MODULE=off
Most of the time, conversion to modules looks like this: go mod init module.com/foo && go mod tidy
The source code is compatible, the tooling has changed. The tooling never was part of the compatibility promise anyway.
@TeddyDD maybe I did it wrong, but ‘go get’ to update/install my single dependency didn’t work in 1.18
@TeddyDD I'll just turn it into a module next time I have to mess with it. Thanks though :) (I don't know why they link to a bunch of long-winded documentation instead of just telling you the steps...)
Revel in the marvels of the universe. We are a collective of forward-thinking individuals who strive to better ourselves and our surroundings through constant creation. We express ourselves through music, art, games, and writing. We also put great value in play. A warm welcome to any like-minded people who feel these ideals resonate with them.