Hacker News new | past | comments | ask | show | jobs | submit login
[dupe] Effective Go (go.dev)
139 points by ibobev on April 26, 2022 | hide | past | favorite | 28 comments



From the webpage

  Note added January, 2022: This document was written for Go's release in 2009, and has not been updated significantly since. Although it is a good guide to understand how to use the language itself, thanks to the stability of the language, it says little about the libraries and nothing about significant changes to the Go ecosystem since it was written, such as the build system, testing, modules, and polymorphism. There are no plans to update it, as so much has happened and a large and growing set of documents, blogs, and books do a fine job of describing modern Go usage. Effective Go continues to be useful, but the reader should understand it is far from a complete guide.


It's best to consider Effective Go as the book, like the timeless K&R ("The C Programming Language" book).


The very same "K" has co-authored the equivalent Go book: https://www.gopl.io/ I can only recommend it, though I wished they would make a second edition including all the new language features. But for the base language, it is still great.


More as a reviewer though, minute 47.

https://cppcast.com/unix-history/


I suspect the biggest annoyance for people new to Go using the gopl book will be the changes to the ecosystem (modules, go get changes, etc.)

You can learn a language without learning about $new_feature_x perfectly fine; this is something you can just pick up later. But if you run in to trouble with the first chapter because the commands no longer work then that kind of sucks.


There's an actual Brian Kernighan book on Go: "The Go Programming Language". (gopl.io)


What I would like is an official guide on how to set up go environment on various platforms. The language is stable, but tooling went through so many radical changes that most of the guides out there are outdated. And setting it up as you go just results in a messy setup.


At this point, is there much to know? You install Go, you start your project in a directory, you run "go mod init" in it, and that's it.


Getting your editor up and running is still a mixed bag. "Install VS Code + plugin" sort of works, but you're likely to have a ton of bugs with the plugin that need configuration tweaks to work around (e.g., "try the LSP backend"). Hopefully stuff will stabilize as workspaces and generics stabilize.


Setting up VSCode takes 2min and has 0 issues. You have nothing to do beside installing the official Go plugin.

Debugging etc ... juste works out of the box.


This hasn't been my experience at various points in the past, but admittedly my most recent foray was a few months ago.


I'm just starting out with Go, but how has the official guide[1] failed you? Genuinely curious as it seems to cover both new installations and the management of multiple versions.

---

[1]: https://go.dev/doc/install


What do you do if you're working on a go project and you need to fork one of its dependencies? Or the project you're working on is a fork?

https://stackoverflow.com/questions/14323872/using-forked-pa...

There are a lot of different approaches listed in here that have changed over time. Different projects evolve at different rates. You might need to become familiar with multiple old ways of dependency management to be really effective.


Not a Go developer (but i really admire their devops-friendly toolchain and general ethos of keeping things simple).

I went to https://go.dev/doc/

I clicked on "Managing Dependencies" -> "Requiring external module code from your own repository fork"

And arrived at:

https://go.dev/doc/modules/managing-dependencies#external_fo...

Assuming that information is correct - and i'm not in a place to judge that, i just don't have the knowledge unfortunately - that journey felt pretty short and discoverable.


Go modules were apparently released right after I changed jobs and stopped using go at work.

Apparently I’m remembering the old hell.


Are there really that many mainstream projects that use alternative dependency handling? Go modules were introduced in v1.11 and they seem pretty mature.

The replace directive seems to solve the issues with forked projects in particular. [1]

1 - https://github.com/golang/go/wiki/Modules#when-should-i-use-...


Clone it, update the consumer go.mod with a "replace" directive to point the dependency at your fork.

I don't understand how this is still a problem for people to understand. It's been the standard for literally years now.

It's actually even better now that go workspaces are a thing.



I haven't messed with them yet but 1.18 add workspaces [1]

This is definitely a pain point I've had with golang and the 'accepted' process has changed 3 or 4 times in the last 2 years.

1: https://go.dev/doc/tutorial/workspaces


> the 'accepted' process has changed 3 or 4 times in the last 2 years.

No it hasn't.


At the time when I was learning go (about 5-6 years ago), this document was a truly effective guide which would have probably wasted my time by a factor of 100 had it been a published book on the subject with hundreds of pages of fluff (just because that's what publishers like).

Well done Go team.


Discussed within the last year (which is the criterion for dupiness on HN - see https://news.ycombinator.com/newsfaq.html)

Effective Go - https://news.ycombinator.com/item?id=28735620 - Oct 2021 (166 comments)


Also this, from way back:

Effective Go - https://news.ycombinator.com/item?id=4285461 - July 2012 (19 comments)


Does anyone know what, if any is, the relationship between this site and this book - https://www.manning.com/books/effective-go


No relation (other than both being about writing Go). This site's origin dates back to Go's release in 2009 [1].

[1] https://web.archive.org/web/20091113154825/http://golang.org...


Anything new about this?


No, I'm not sure why it's here.


Would Effective Go Assembly be on the banned book list?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: