<story><title>Go&apos;s Tooling Is an Undervalued Technology</title><url>https://nullprogram.com/blog/2020/01/21/</url></story><parent_chain></parent_chain><comment><author>tsimionescu</author><text>Coming from the C# and JVM world to go, tooling looked like one of the worst parts of Go.&lt;p&gt;The debugging story is very limited:&lt;p&gt;- No function execution&lt;p&gt;- No edit-and-continue&lt;p&gt;- No conditional breakpoints&lt;p&gt;- No watchpoints&lt;p&gt;Package 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:&lt;p&gt;- Relies on source-control integration&lt;p&gt;- Horrible import paths for packages published from large repos&lt;p&gt;- Versioning based on source-control tagging, exact format undocumented&lt;p&gt;- Major version changes require source-code level changes in all files touching the package&lt;p&gt;- 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?)&lt;p&gt;The source-code level tools&amp;#x2F;plugins available are extremely basic (except for GoLand):&lt;p&gt;- No refactoring support other than &amp;quot;rename variable&amp;quot;&lt;p&gt;- Reference-finding across modules rarely seems to work&lt;p&gt;- No way to automatically find all implementations of an interface - especially problematic in a language with implicit interface implementation&lt;p&gt;- The tools are pretty slow, constantly re-parsing large chunks of code; go pls has fixed some of that</text></comment>
<story><title>Go&apos;s Tooling Is an Undervalued Technology</title><url>https://nullprogram.com/blog/2020/01/21/</url></story><parent_chain></parent_chain><comment><author>kortex</author><text>When I first got into go, a few of the Go Opinions kinda rubbed me the wrong way.&lt;p&gt;- I have to source GOPATH in my rc files? Annoying.&lt;p&gt;- File paths are network URI&amp;#x27;s? Ugly.&lt;p&gt;- I have to deal with every err != nil? Verbose.&lt;p&gt;But over time I&amp;#x27;ve grown to love go more than almost any language (python is still bae, especially with type hints, and even then, it&amp;#x27;s close).&lt;p&gt;- dependency pathing is a pain in most other languages. Singular source of truth is great (I&amp;#x27;ve had virtualenvs leak and cmake do bizarre things when multiple libs are on the file tree)&lt;p&gt;- host&amp;#x2F;paths are file&amp;#x2F;paths. I love this pattern now. It&amp;#x27;s just so obvious and natural.&lt;p&gt;- ok the err != nil still drives me nuts. But it drives me to write things in a way where I don&amp;#x27;t need to deal with errors as much. Reduces fractal complexity and paths through the code. It also forces &amp;quot;the buck stops here&amp;quot; sort of pattern where you have some atrium which is resiliant and is where most errors bubble up to</text></comment>