asdf-golang: Both `$GOPATH` or `$GOROOT` are not set & request for a custom place to use my installed go version

Describe the bug Both $GOPATH or $GOROOT are not.

snowflake in ~
➜ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/snowflake/Library/Caches/go-build"
GOENV="/Users/snowflake/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/snowflake/.asdf/installs/golang/1.13.8/packages"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/snowflake/.asdf/installs/golang/1.13.8/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/snowflake/.asdf/installs/golang/1.13.8/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/35/t0nqj9vd2zd735xf5d05ybzr0000gn/T/go-build082200721=/tmp/go-build -gno-record-gcc-switches -fno-common"

snowflake in ~
➜ echo $GOROOT


snowflake in ~
➜ echo $GOPATH


snowflake in ~
➜ asdf version
v0.7.6

To Reproduce Steps to reproduce the behavior:

  1. Install go using asdf-golang
  2. switch to any version of the currently installed go
  3. echo $GOPATH or $GOROOT
  4. return emptiness 😄

Expected behavior To Have $GOPATH & $GOROOT set.

Desktop (please complete the following information):

  • OS: macOS Catalina Version 10.15.3
  • SHELL: zsh 5.7.1 (x86_64-apple-darwin19.0)

Additional context Can I add a sort of Place to put my $GOPATH & $GOROOT as I want them to be inside of go folder inside of my home directory and the library append on it. eg: installing go 1.13.8 with the following environment variable ASDF_GOLANG_CUSTOM_PATH=$HOME/go so my $GOPATH & $GOROOT set as the following $GOPATH=ASDF_GOLANG_PATH/1.13.8/...... $GOROOT=ASDF_GOLANG_PATH/1.13.8/......

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Reactions: 26
  • Comments: 19 (5 by maintainers)

Most upvoted comments

I’ve found this alias is useful

alias go-reshim='asdf reshim golang && export GOV=$(asdf current golang | sed  '\''s/ *(set by .*)//g'\'') && export GOROOT="$ASDFINSTALLS/golang/$GOV/go/"'

I have this alias called in my .zshrc or .bashrc files, but I find that I need to call this everytime I switch to a new project.

Thanks, this has indeed been helpful. I made a slight modification since the sed parsing didn’t quite work for my version of asdf.

alias go-reshim='asdf reshim golang && export GOROOT="$(asdf where golang)/go/"'

After I thought I had it fixed with some of the previous suggestions, what ended up working for both GOPATH and GOROOT with repo-specific .tool-versions was this in my ~/.bashrc:

# go
export GOPATH=$(asdf where golang)/packages
export GOROOT=$(asdf where golang)/go
export PATH="${PATH}:$(go env GOPATH)/bin"

it’d be good to document this in readme - what user needs to do for these to be set properly with asdf-golang

Why do we need GOPATH?

Since Go 1.11, you don’t have to use GOPATH anymore. Simply go to your project directory and do this once:

go mod init github.com/youruser/yourrepo
  • With this, Go creates a module root at that directory.
  • You can create as many modules as you want.
  • For step by step instructions, also see this answer.

https://stackoverflow.com/a/53026674/7391331

@MuhmdRaouf Here is my dotfiles https://github.com/matts966/dotfiles-open.

You can refer official doc for other shells. https://github.com/direnv/direnv/blob/master/docs/hook.md

Edit: Maybe I misunderstood the problem. We should set additional export for GOPATH and GOROOT even with asdf-direnv for example by export GOROOT="$(asdf where golang)/go/"' for your global installation.

Edit2: You can add root .envrc with use asdf to set GOPATH and GOROOT for the global installation

Using https://github.com/asdf-community/asdf-direnv with global .tool-versions and .envrc for overriding solves all the problems for me.

+1 for this.

Also, it’d be great if the GOBIN was set. Currently I have to manually set this.

I generally set my defaults in ~/.bashrc and set project local versions in ~/.envrc and use direnv to set/unset. With the latest versions of asdf there is the ability to add a hook for environment variables, but it seems like it could get hairy to determine when I should override what the user already has in their env.

I’ve found this alias is useful

alias go-reshim='asdf reshim golang && export GOV=$(asdf current golang | sed  '\''s/ *(set by .*)//g'\'') && export GOROOT="$ASDFINSTALLS/golang/$GOV/go/"'

I have this alias called in my .zshrc or .bashrc files, but I find that I need to call this everytime I switch to a new project.