| There are some subtleties here, but go.mod files are not lockfiles, including go.mod files don't follow a traditional constraint/lockfile split, which I think is part of the point in that snippet you quoted. Another way they differ is when installing a top-level tool by default npm does not use the exact version from a library's lockfile to pick the selected version of another library as far I as understand, whereas Go does by default use the exact version required by a library's go.mod file in that scenario. In other words, go.mod files play a bigger role for libraries than a traditional lockfile does by default for libraries in most other ecosystems. Here's a good analysis on the contrast between go.mod and the default behavior of more traditional lockfiles (using the npm 'colors' incident as a motivating example): https://research.swtch.com/npm-colors That link also includes some comments on 'npm ci' and 'shrinkwrap' that I won't repeat here. All that said, go.mod files do record precise dependency requirements and provide reproducible builds, so it's possible to draw some analogies between go.mod & lockfiles if you want. I just wouldn't say "go.mod files are lockfiles". ;-) |
Not saying the tradeoff isn't worth it, but pinning to dependency lockfiles isn't without downsides.