proposal: cmd/go, cmd/distpack: build and run tools that are not necessary for builds as needed and don't include in binary distribution #71867
Labels
GoCommand
cmd/go
Proposal
ToolProposal
Issues describing a requested change to a Go tool or command-line program.
Milestone
Proposal Details
This proposal is to stop including tools that are not needed for builds in the binary distribution. Instead the tools would be built and run as needed by
go tool
using a similar mechanism to that used to build and run tools declared with atool
directive ingo.mod
. The goal of this proposal is to reduce the go binary distribution size.In cmd/distpack, we should be able to discard the following tools before packaging the binary distribution:
addr2line
,buildid
,nm
,objdump
,pprof
,test2json
, andtrace
. These tools do not seem to be invoked by the go command. We could go a little further and also removedoc
andfix
too because they are only invoked bygo doc
andgo fix
respectively.The install target for main packages in cmd will not change, so
go install
will continue to install binaries to$GOROOT/pkg/tool/$GOOS_$GOARCH
.If a tool binary is present in that location, it will be run from there, but if not, the go command will fall back to building (if the tool binary isn't cached) and running the tool, similarly to how
go tool
builds and runs tools declared with thetool
directive.Potential issues we should watch out for and which I would be interested in hearing feedback about:
go tool
to run it may be surprised that the tool that's run doesn't include their changes. So we may want to think a little more about what to do in that case.go test
andgo run
wouldn't work on either.cc @dmitshur
The text was updated successfully, but these errors were encountered: