Go's Tooling Is an Undervalued Technology
Coming from the C# and JVM world to go, tooling looked like one of the worst parts of Go.The debugging story is very limited:- No function execution- No edit-and-continue- No conditional breakpoints- No watchpointsPackage management works OK on the consumption side, though it is much more clunky than with classic package managers (e.g. set an ENV variable to get a custom proxy, but write something in go.mod file to get a per-package proxy). However, the publishing side is all over the place:- Relies on source-control integration- Horrible import paths for packages published from large repos- Versioning based on source-control tagging, exact format undocumented- Major version changes require source-code level changes in all files touching the package- Multiple Go modules in same repo use-case is not documented (can you have separate versions from same commit? how do they reference each other?)The source-code level tools/plugins available are extremely basic (except for GoLand):- No refactoring support other than "rename variable"- Reference-finding across modules rarely seems to work- No way to automatically find all implementations of an interface - especially problematic in a language with implicit interface implementation- The tools are pretty slow, constantly re-parsing large chunks of code; go pls has fixed some of that