### Go command {#go-command}
+<!-- go.dev/issue/62067 -->
The `go build` and `go install` commands now accept a `-json` flag that reports
build output and failures as structured JSON output on standard output.
For details of the reporting format, see `go help buildjson`.
### Cgo {#cgo}
+<!-- go.dev/issue/56378 -->
Cgo supports new annotations for C functions to improve run time
performance.
`#cgo noescape cFunctionName` tells the compiler that memory passed to
`cFunctionName` does not call back to any Go functions.
For more information, see [the cgo documentation](/pkg/cmd/cgo#hdr-Optimizing_calls_of_C_code).
+<!-- go.dev/issue/67699 -->
Cgo currently refuses to compile calls to a C function which has multiple
incompatible declarations. For instance, if `f` is declared as both `void f(int)`
and `void f(double)`, cgo will report an error instead of possibly generating an
### Vet
+<!-- go.dev/issue/44251 -->
The new `tests` analyzer reports common mistakes in declarations of
tests, fuzzers, benchmarks, and examples in test packages, such as
malformed names, incorrect signatures, or examples that document
to run.
This analyzer is among the subset of analyzers that are run by `go test`.
+<!-- go.dev/issue/60529 -->
The existing `printf` analyzer now reports a diagnostic for calls of
the form `fmt.Printf(s)`, where `s` is a non-constant format string,
with no other arguments. Such calls are nearly always a mistake
### GOCACHEPROG
+<!-- go.dev/issue/64876 -->
The `cmd/go` internal binary and test caching mechanism can now be implemented
by child processes implementing a JSON protocol between the `cmd/go` tool
and the child process named by the `GOCACHEPROG` environment variable.
--- /dev/null
+<!--
+Output from relnote todo that was generated and reviewed on 2024-11-26:
+
+CL 579955 has a RELNOTE comment without a suggested text (from RELNOTE comment in https://go.dev/cl/579955) - handled below
+CL 603055 has a RELNOTE comment without a suggested text (from RELNOTE comment in https://go.dev/cl/603055) - handled below
+CL 618598 has a RELNOTE comment without a suggested text (from RELNOTE comment in https://go.dev/cl/618598) - generating LC_UUID in Go linker for macOS 15 is now tracked in issue 68678 itself as a release blocker
+CL 618601 has a RELNOTE comment without a suggested text (from RELNOTE comment in https://go.dev/cl/618601) - on ELF, GNU build ID being generated by default is now tracked in a new release-blocking issue 70586
+accepted proposal https://go.dev/issue/25309 (from https://go.dev/cl/594018, https://go.dev/cl/595120, https://go.dev/cl/595564, https://go.dev/cl/601778) - new x/crypto package; doesn't seem to need to be mentioned but asked anyway in https://go.dev/issue/25309#issuecomment-2498747653
+accepted proposal https://go.dev/issue/26232 (from https://go.dev/cl/605256, https://go.dev/cl/605275, https://go.dev/cl/605298, https://go.dev/cl/625036) - cmd/go's HTTP auth is tracked in proposal 26232 itself as a release blocker
+accepted proposal https://go.dev/issue/34208 (from https://go.dev/cl/586241) - CL 586241 implements a fix for a Go 1.23 feature, doesn't seem to be need anything in Go 1.24 release notes
+accepted proposal https://go.dev/issue/38445 (from https://go.dev/cl/626495) - proposal 38445 is about x/tools/go/package, doesn't need anything in Go 1.24 release notes
+accepted proposal https://go.dev/issue/41682 (from https://go.dev/cl/629676) - x509sha1 godebug being removed is covered in doc/next/6-stdlib/99-minor/crypto/x509/41682.md
+accepted proposal https://go.dev/issue/43744 (from https://go.dev/cl/357530) - unclear if Go 1.24 release notes need anything; pinged it in https://go.dev/issue/43744#issuecomment-2498773718
+accepted proposal https://go.dev/issue/43993 (from https://go.dev/cl/626116) - CL 626116 prepares the tree towards the vet change but the vet change itself isn't implemented in Go 1.24, so nothing to say in Go 1.24 release notes
+accepted proposal https://go.dev/issue/44251 (from https://go.dev/cl/603476) - new tests analyzer is covered in 3-tools.md
+accepted proposal https://go.dev/issue/44505 (from https://go.dev/cl/609955) - CL 609955 is an internal cleanup in x/tools, no need for Go 1.24 release note
+accepted proposal https://go.dev/issue/46477 (from https://go.dev/cl/601115, https://go.dev/cl/601235, https://go.dev/cl/614638, https://go.dev/cl/616816) - permitting type parameters on aliases is tracked in proposal 46477 itself as a release blocker
+accepted proposal https://go.dev/issue/48429 (from https://go.dev/cl/521958, https://go.dev/cl/521959, https://go.dev/cl/534817, https://go.dev/cl/563175, https://go.dev/cl/613095, https://go.dev/cl/614555, https://go.dev/cl/630695) - cmd/go support for tracking tool dependencies in go.mod is tracked in proposal 48429 itself as a release blocker
+accepted proposal https://go.dev/issue/50603 (from https://go.dev/cl/595376, https://go.dev/cl/596035, https://go.dev/cl/609155, https://go.dev/cl/611916, https://go.dev/cl/627295) - cmd/go support for stamping pseudo-version in go build is tracked in proposal 50603 itself as a release blocker
+accepted proposal https://go.dev/issue/51269 (from https://go.dev/cl/627035) - may be worth mentioning in Go 1.24 release notes, or may be fine to leave out; commented at https://go.dev/issue/51269#issuecomment-2501802763
+accepted proposal https://go.dev/issue/51430 (from https://go.dev/cl/613375) - CL 613375 is an internal documentation comment; proposal 51430 happened in Go 1.20/1.21 so nothing more is needed in Go 1.24 release notes
+accepted proposal https://go.dev/issue/53021 (from https://go.dev/cl/622276) - CL 622276 improves docs; proposal 53021 was in Go 1.20 so nothing more is needed in Go 1.24 release notes
+accepted proposal https://go.dev/issue/54265 (from https://go.dev/cl/609915, https://go.dev/cl/610675) - CLs that refer to a Go 1.22 proposal, nothing more is needed in Go 1.24 release notes
+accepted proposal https://go.dev/issue/56378 (from https://go.dev/cl/579955) - mentioning that #cgo noescape/nocallback directives are available in Go 1.24 is now tracked in proposal 56378 itself as a release blocker; now done in CL 632015
+accepted proposal https://go.dev/issue/56986 (from https://go.dev/cl/618115) - CL 618115 adds documentation; it doesn't need to be mentioned in Go 1.24 release notes
+accepted proposal https://go.dev/issue/57786 (from https://go.dev/cl/472717) - CL 472717 is in x/net/http2 and mentions a Go 1.21 proposal; it doesn't seem to need anything in Go 1.24 release notes
+accepted proposal https://go.dev/issue/60061 (from https://go.dev/cl/612038) - CL 612038 is a CL that deprecates something in x/tools/go/ast and mentions a Go 1.22 proposal; doesn't need anything in Go 1.24 release notes
+accepted proposal https://go.dev/issue/60529 (from https://go.dev/cl/585795, https://go.dev/cl/610795) - new vet check that reports printf calls with non-const format and no args needs to be mentioned in Go 1.24 release notes and is tracked in proposal 60529 itself as a release blocker; now done in CL 631682
+accepted proposal https://go.dev/issue/60905 (from https://go.dev/cl/610195) - CL 610195 seems like a small performance enhancement that builds on the Go 1.23 proposal to add GOARM64; probably okay without being mentioned in Go 1.24 release notes (also probably okay to mention)
+accepted proposal https://go.dev/issue/61324 (from https://go.dev/cl/411907) - CL 411907 is an x/tools CL that implements a proposal for a new package there; doesn't need anything in Go 1.24 release notes
+accepted proposal https://go.dev/issue/61395 (from https://go.dev/cl/594738, https://go.dev/cl/594976) - CL 594738 made sync/atomic AND/OR operations intrinsic on amd64, but the API was already added in Go 1.23; CL 594976 is a fix; probably doesn't require a Go 1.24 release note
+accepted proposal https://go.dev/issue/61417 (from https://go.dev/cl/605955) - a new field in x/oauth2; nothing to mention in Go 1.24 release notes
+accepted proposal https://go.dev/issue/61476 (from https://go.dev/cl/608255) - CL 608255 builds on GORISCV64 added in Go 1.23; nothing to mention in Go 1.24 release notes
+accepted proposal https://go.dev/issue/61777 (from https://go.dev/cl/601496) - CL 601496 added a WriteByteTimeout field to x/net/http2.Server; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/61940 (from https://go.dev/cl/600997) - CL 600997 deleted obsolete code in x/build and mentioned an accepted proposal; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/62067 (from https://go.dev/cl/536396, https://go.dev/cl/536397, https://go.dev/cl/536398, https://go.dev/cl/536399, https://go.dev/cl/558637, https://go.dev/cl/628955, https://go.dev/cl/629335) - go build -json is covered in 3-tools.md
+accepted proposal https://go.dev/issue/62113 (from https://go.dev/cl/594195) - CL 594195 made iterator-related additions in x/net/html; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/62484 (from https://go.dev/cl/600775) - CL 600775 documents CopyFS symlink behavior and mentions the Go 1.23 proposal; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/64127 (from https://go.dev/cl/597576) - mentioning the new vet check to report invalid Go versions in build tags is tracked in proposal 64127 itself as a release blocker
+accepted proposal https://go.dev/issue/64207 (from https://go.dev/cl/605875) - an x/website CL that follows up on a Go 1.23 proposal; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/64802 (from https://go.dev/cl/628681) - a crypto/ecdsa change when rand is nil; commented at https://go.dev/issue/64802#issuecomment-2502019212 for next steps
+accepted proposal https://go.dev/issue/64876 (from https://go.dev/cl/626035) - cmd/go's GOCACHEPROG being promoted out of experiment is covered in 3-tools.md
+accepted proposal https://go.dev/issue/65199 (from https://go.dev/cl/603055, https://go.dev/cl/603836, https://go.dev/cl/604316, https://go.dev/cl/604975, https://go.dev/cl/606855, https://go.dev/cl/611315) - the new go:wasmexport directive is now tracked in proposal 65199 itself as a release blocker
+accepted proposal https://go.dev/issue/65236 (from https://go.dev/cl/596135) - CL 596135 adds tests for the Go 1.23 proposal 65236; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/65269 (from https://go.dev/cl/602855, https://go.dev/cl/616717, https://go.dev/cl/629176) - new standard library package crypto/sha3 package is covered in 6-stdlib/5-sha3.md
+accepted proposal https://go.dev/issue/66315 (from https://go.dev/cl/577996) - adding Pass.Module field to x/tools/go/analysis doesn't seem like something that needs to be mentioned in Go 1.24 release notes
+accepted proposal https://go.dev/issue/66387 (from https://go.dev/cl/569955) - extending the copylock analyzer in cmd/vet is now tracked in proposal 66387 itself as a release blocker
+accepted proposal https://go.dev/issue/66540 (from https://go.dev/cl/603958) - a Go language spec clarification; might not need to be mentioned in Go 1.24 release notes; left a comment at https://go.dev/issue/66540#issuecomment-2502051684
+accepted proposal https://go.dev/issue/66821 (from https://go.dev/cl/602495, https://go.dev/cl/602497, https://go.dev/cl/608175, https://go.dev/cl/608435, https://go.dev/cl/621979, https://go.dev/cl/622115) - crashing the process on error reading randomness (which should not have a path to happen) might need to be mentioned; commented at https://go.dev/issues/66821#issuecomment-2502069725 for next steps
+accepted proposal https://go.dev/issue/66984 (from https://go.dev/cl/626615, https://go.dev/cl/627059) - relaxation of wasm function import signature type constraints might be something to mention in Go 1.24 release notes; commented at https://go.dev/issue/66984#issuecomment-2502079735 for next steps
+accepted proposal https://go.dev/issue/67001 (from https://go.dev/cl/588216, https://go.dev/cl/602495, https://go.dev/cl/608175, https://go.dev/cl/609178, https://go.dev/cl/611943, https://go.dev/cl/622015) - Linux 3.2 kernel requirement is covered in 7-ports.md
+accepted proposal https://go.dev/issue/67675 (from https://go.dev/cl/630995) - ability to generate a serial number via nil template.SerialNumber is now tracked in proposal 67675 itself as a release blocker; now done in CL 631683
+accepted proposal https://go.dev/issue/67795 (from https://go.dev/cl/616218) - iteratior support for x/tools/go/ast/inspector; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/67812 (from https://go.dev/cl/601497) - configurable server pings for x/net/http2.Server; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/68232 (from https://go.dev/cl/595676) - x/sys/unix additions; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/68384 (from https://go.dev/cl/611875) - expanding the scope of Go Telemetry to include Delve isn't directly tied to Go 1.24 and doesn't seem to need to be mentioned in Go 1.24 release notes
+accepted proposal https://go.dev/issue/68898 (from https://go.dev/cl/607495, https://go.dev/cl/620036, https://go.dev/cl/620135, https://go.dev/cl/623638) - a proposal for x/tools/go/gcexportdata to document 2 releaes + tip support policy; since the change is in x/tools it doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/69095 (from https://go.dev/cl/593683, https://go.dev/cl/608955, https://go.dev/cl/610716) - a proposal that affects maintenance and support of golang.org/x repositories; doesn't need to be mentioned in Go 1.24 release notes
+accepted proposal https://go.dev/issue/69290 (from https://go.dev/cl/613095) - cmd/go caching link output binaries is now tracked in proposal 69290 itself as a release blocker
+accepted proposal https://go.dev/issue/69291 (from https://go.dev/cl/610939) - CL 610939 refactors code in x/tools and mentions the still-open proposal #69291 to add Reachable to x/tools/go/ssa/ssautil; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/69360 (from https://go.dev/cl/614158, https://go.dev/cl/614159, https://go.dev/cl/614635, https://go.dev/cl/614675) - proposal 69360 is to tag and delete gorename from x/tools; doesn't need a Go 1.24 release note
+accepted proposal https://go.dev/issue/69393 (from https://go.dev/cl/630775) - automatic crypto/tls.CurvePreferences ordering is now tracked in proposal 69393 itself as a release blocker
+accepted proposal https://go.dev/issue/69687 (from https://go.dev/cl/591997, https://go.dev/cl/629735) - experimental package testing/synctest behind an experiment; commented at https://github.com/golang/go/issues/69687#issuecomment-2502179333, leaving to Damien to decide whether to document it or defer that until the package is added as non-experiment
+-->