On Fri, Jul 27, 2018 at 9:33 PM, Dan Kortschak <dan.kortsc...@adelaide.edu.au> wrote: > > That's fine. Though given that a program *can* shell out to `go list > std` to get the list of std packages, it seems odd to me that there is > not some way of doing that without need to exec a new process. You > explained it, but not in a way that makes sense to me.
I'll try to explain it again. In Go 1.11 the list of standard packages can be found by looking for directories under `$GOROOT/src`. We create a package stdpkg that returns the list of standard packages. It works fine when using Go 1.11. You build a program using Go 1.11 that calls stdpkg. It works fine. You install that program in your /usr/bin directory. Now, for some reason in Go 1.12, we move things around. Now looking at `$GOROOT/src` no longer gives you the list of standard packages, they've moved somewhere else. We update stdpkg so that it uses the new mechanism. You update your system to use Go 1.12. You use it for a few days. Then you run your program, previously built with Go 1.11, previously installed in /usr/bin. That program looks at `$GOROOT/src` and doesn't find anything, because you are now using Go 1.12. So your program fails in some unexpected way. If your program instead ran `go list`, then it would still work, even when built with 1.11, after you update to 1.12. Ian -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.