← Back to context

Comment by throwaway894345

1 day ago

When Go was new, having better package management than Python and C++ was saying a lot. I’m sure Go wasn’t the first, but there weren’t many mainstream languages that didn’t make you learn some imperative DSL just to add dependencies.

Sure, but all those languages didn't have the psychotic design that mandated all your code lives under $GOPATH for the first several versions.

I'm not saying it's awful, it's just a pretty mid language, is all.

  • That was a Plan9ism, I think. Java had something like it with CLASSPATH too, didn't it?

  • I never understood the GOPATH freakout, coming from Python it seemed really natural- it's a mandatory virtualenv.

    • The fact that virtualenv exists at all should be viewed by the python community as a source of profound shame.

      The idea that it's natural and accepted that we just have python v3.11, 3.12, 3.13 etc all coexisting, each with their own incompatible package ecosystems, and in use on an ad-hoc, per-directory basis just seems fundamentally insane to me.

  • I picked up Go precisely in 2012 because $GOPATH (as bad as it was) was infinitely better than CMake, Gradle, Autotools, pip, etc. It was dead simple to do basic dependency management and get an executable binary out. In any other mainstream language on offer at the time, you had to learn an entire programming language just to script your meta build system before you could even begin writing code, and that build system programming language was often more complex than Go.

  • The language has changed a lot since then. Give it a fresh look sometime.

    • It's still pretty mid and still missing basic things like sets.

      But mid is not all that bad and Go has a compelling developer experience that's hard to beat. They just made some unfortunate choices at the beginning that will always hold it back.