From the 1.17 release notes (https://golang.org/doc/go1.17#gofmt): gofmt (and go fmt) now synchronizes //go:build lines with // +build lines. More info about this change can be found at https://golang.org/design/draft-gobuild
On Windows, syscall.Umask doesn't exist, and trying to compile with it doesn't work. Add two files, controlled by build tags, that return the umask on Unix systems and return a no-op default on Windows, so that we can compile on all platforms.