I tried it out and the format parsed by debug.ParseBuildInfo is almost exactly what is output by go version -m: https://go.dev/play/p/L-MNzr0EnjV (and yes, my goimports version is old)
On Fri, 18 Oct 2024 at 08:20, Kurtis Rader <kra...@skepticism.us> wrote: > On Thu, Oct 17, 2024 at 10:31 PM shan...@gmail.com <shane....@gmail.com> > wrote: > >> I have a need to (programatically) check what version of `goimports` >> someone has installed on their system. >> > > It might help if you told us why you need to do that. > > The answer by Axel Wagner is somewhat helpful but the output of "go > version -m ..." is meant for human consumption and hard to reliably parse > by a program. On my system (where I haven't performed any updates in > several months): > > > go version -m /opt/bin/goimports > /opt/bin/goimports: go1.23.0 > path golang.org/x/tools/cmd/goimports > mod golang.org/x/tools v0.24.0 > h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= > dep golang.org/x/mod v0.20.0 > h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= > dep golang.org/x/sync v0.8.0 > h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= > build -buildmode=exe > build -compiler=gc > build > DefaultGODEBUG=asynctimerchan=1,gotypesalias=0,httplaxcontentlength=1,httpmuxgo121=1,httpservecontentkeepheaders=1,panicnil=1,tls10server=1,tls3des=1,tlskyber=0,tlsrsakex=1,tlsunsafeekm=1,winreadlinkvolume=0,winsymlink=0,x509keypairleaf=0,x509negativeserial=1 > build CGO_ENABLED=1 > build CGO_CFLAGS= > build CGO_CPPFLAGS= > build CGO_CXXFLAGS= > build CGO_LDFLAGS= > build GOARCH=arm64 > build GOOS=darwin > build GOARM64=v8.0 > > > Apparently my current version of goimports is v0.24.0. After updating my > Go related CLI tools (via "go install golang.org/x/tools/...@latest") > running "go version -m /opt/bin/goimports" reports > > /opt/bin/goimports: go1.23.0 > path golang.org/x/tools/cmd/goimports > mod golang.org/x/tools v0.26.0 > h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= > ... > > > It's not obvious to me how to reliably extract the relevant version from > the "go version -m" output for a specific CLI tool. Should there be a > reliable way to programmatically do so? I'm inclined to answer "yes" but > it's not obvious that should be done by something like "go version -m ..." > or something like "/path/to/command -json -version". Obviously all of the > approaches discussed involve running an external command and parsing its > output. Which has its own set of problems regardless of the output produced > by that command. And, obviously, how do you handle a command named > "goimports" installed by the user that is not from the golang.org/x/tools > repository. > > -- > Kurtis Rader > Caretaker of the exceptional canines Junior and Hank > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CABx2%3DD-uBkK%2B%2B8BSvdxxmYOQFxvGo5N%3D5qzKnvtHh0XwMqyiww%40mail.gmail.com > <https://groups.google.com/d/msgid/golang-nuts/CABx2%3DD-uBkK%2B%2B8BSvdxxmYOQFxvGo5N%3D5qzKnvtHh0XwMqyiww%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGkW1NJPgbnXaFXQhnzd6oyRd8B%3DV_AAxLi9OUYmh6_cw%40mail.gmail.com.