Go: cmd/go: two possible canonical states when go.sum is empty, the file may or may not exist

Created on 20 Dec 2019  路  4Comments  路  Source: golang/go

What version of Go are you using (go version)?

go version go1.13.5 darwin/amd64

Does this issue reproduce with the latest release?

using latest

What operating system and processor architecture are you using (go env)?

macOS Catalina
GOHOSTARCH="amd64"
GOHOSTOS="darwin"

What did you do?

  • Created simple hello world application without dependencies consisting of main.go and a go.mod file containing:
module github.com/stephanwesten/hellojob

go 1.13
  • Executed go build and noticed that no go.sum was generated (unexpected)

  • added a dummy dependency to go.mod, re-ran go build and a go.sum was generated.

  • removed dependency from go.mod, so it is back to original above, and re-ran go build and go mod tidy

  • go.sum was still there.

What did you expect to see?

(Note that this is the first time for me using go modules so my formulation might not be 100% accurate)
Either go.sum is removed or it should have been generated with the first go.build. This would give symmetric behaviour.

I would prefer that go.sum is always generated. The reason why this was a problem for me is that I used a Dockerfile template that assumed a go.sum file to be there.

What did you see instead?

see above

BTW I entered 'go bug' to file this issue and I got a github error. Perhaps temporary problem?

GoCommand NeedsInvestigation modules

Most helpful comment

I don't think we should delete the go.sum file entirely when it becomes empty: leaving an empty file makes it more obvious that the edit is intentional (rather than accidental).

I'm ambivalent about creating the go.sum file unconditionally. If the module really doesn't have any dependencies, then we really don't need to create that file, and some folks may find it annoying for the go command to implicitly create an empty file that they don't need.

For the specific use-case of a Dockerfile template, you can always touch go.sum at some point prior to the build.

All 4 comments

Thanks for reporting.

We should check if this asymmetry has been discussed in the past and if any decision was made. If not, that can be done in this issue.

/cc @bcmills @jayconrod @matloob as cmd/go owners.

BTW I entered 'go bug' to file this issue and I got a github error. Perhaps temporary problem?

What was the error text? If you can still reproduce the issue, please file a separate issue for that so we can investigate. I tried running go bug just now and did not get an error.

schrodinger's go.sum.

sorry, I'll see myself out now

I don't think we should delete the go.sum file entirely when it becomes empty: leaving an empty file makes it more obvious that the edit is intentional (rather than accidental).

I'm ambivalent about creating the go.sum file unconditionally. If the module really doesn't have any dependencies, then we really don't need to create that file, and some folks may find it annoying for the go command to implicitly create an empty file that they don't need.

For the specific use-case of a Dockerfile template, you can always touch go.sum at some point prior to the build.

Imo go build should create the go.sum file always if there is mod file since this gives the most consistent behavior. I see go.sum as some internal housekeeping, its content is not relevant to the user, but its presence does impact the user.

Was this page helpful?
0 / 5 - 0 ratings