Ready, steady, Go: Programming language releases 1.15 beta

Ready, steady, Go: Programming language releases 1.15 beta

The team behind Google’s programming language has issued a beta for Go 1.15, giving everyone enough time to give feedback before the final release in August.

Go, which is especially well known as the programming language used to build Docker and Kubernetes, mainly sees some core library and tooling enhancements in its 1.15 iteration. The draft release notes for example mention that there’s now a way to set the location of the module cache of the Go command by setting a new environment variable GOMODCACHE. GOPROXY has been modified to be able to skip proxies that return errors, while some flag parsing issues as well as access denied problems under Windows are meant to happen less thanks to some fixes.

The language’s command line tool for code examination Vet has learned to warn “about conversions of the form string(x) where x has an integer type other than rune or byte”, to clarify how it is used correctly. Other conversions might be prohibited in a future release, but since this would be a backwards incompatible change, the check is meant as a trial step for this. Similar is true for a new warning that is meant to alert users of impossible interface conversions.

In the core library users will find a new package called time/tzdata after updating. By importing it, developers allow a program to  “to find timezone information even if the timezone database is not available on the local system”. A variety of crypto packages have been enhanced with an Equal method for PrivateKey and PublicKey types, which can be used to create type-safe public key interfaces.

The library’s TLS package includes a new Dialer type that together with its DialContext permits using the same context to connect and handshake with a TLS server in v1.15.  Automatically generated session ticket keys are rotated every 24 hours and remain live for only 7 days to keep security risks low. Crypto/tls has also been fitted with a new VerifyConnection callback for the Config type, so that teams can add custom verification for every connection, should there be a need.

Additional improvements can be found in the Go linker, which for instance uses less memory in v1.15, and the compiler, which amongst other things comes with a -spectre flag to enable Spectre mitigations and produces smaller binaries. 

All technical changes aside, the Go team also decided to merge a PR to adjust the project’s internal language a bit, getting rid of the terms whitelist, blacklist, master, and slave to make it more inclusive (and also a bit more self-explanatory). It thereby joins other organisations such as GitHub, which is currently working on an alternative name for its default branches, and the Android project, that were nudged by the Black Lives Matter protests into rethinking and reworking their terminology. 

Other well-known projects such as Git or Ansible ponder similar changes. Git’s stance on this is widely monitored, as some smaller projects look at it for guidance in the matter. However, changes over there are – for obvious reasons – always heavily discussed, so it remains to be seen if anything will come from it. Those wondering if main wouldn’t be a better suited name for their old master, however, can find a nice description on how to do it at Microsoft PPM Scott Hanselman’s blog, for example.