Russ Cox - On the Path to Go 2

  • Go’s general principle is to prioritize on a solid core, and let third-party libraries converge on abstractions above that core, and to eventually bring some of these abstractions back into the stdlib.
  • There’s a great sense of pragmatism (not to mention egolessness) here; experiments are abandoned, the community is consulted, a strong base implementation is favored over all the bells and whistles at launch, etc.
  • Errors are typically wrapped using Go’s interface composition, and there wasn’t a built-in way to “unwrap” an error to get to the deepest level. Many libraries eventually provided this, and this was brought into the stdlib at 1.13.
  • Go initially didn’t define a way to specify a dependency version, always downloading the latest one. The community came up with solutions to this (like gopkg) that are (sort of?) coming back to vanilla Go via modules.
  • Generics are on the horizon, second in line after improvements to error handling. Mentioned this other talk that contains more details.
Edit