Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

goenv local does not take effect? #209

Open
huanghantao opened this issue Dec 26, 2021 · 9 comments
Open

goenv local does not take effect? #209

huanghantao opened this issue Dec 26, 2021 · 9 comments

Comments

@huanghantao
Copy link

huanghantao commented Dec 26, 2021

Reproducible Steps:

goenv local 1.16.8

In the same shell:

goenv versions
  system
  1.14.4
  1.15.15
* 1.16.8 (set by /Users/codinghuang/codeDir/wiki/k8s-operator/docs/.go-version)
  1.17.1

In the same shell:

go version
go version go1.15.15 darwin/amd64

other info:

goenv
goenv 2.0.0beta11
@zhuxubin01
Copy link

the same problem. i resolved by comment the following lines, and source ~/.zsh
image

if above lines are not commented, every time you use 'go local 1.14.4', you should do source ~/.zsh, then go version

will change to what you want. I don't know whether this is a bug.

@neersighted
Copy link
Contributor

This is a configuration issue -- you shouldn't be blindly prepending $GOROOT/bin to the path but instead relying on goenv's shims in your path (which are put there by goenv init -). goenv local is doing nothing because the old $GOROOT from your shell startup is taking precedence over the shims.

@neersighted
Copy link
Contributor

It looks like the offending lines came from the README -- it looks like this feature is not that well thought-out and potentially breaks stuff badly. I personally don't use goenv init -/configure according to the README so I never ran into this.

@debo
Copy link
Contributor

debo commented May 18, 2022

Yes I think that's because using the *env init - is the common approach of all the *env tools. What's your approach @neersighted and more importantly your workflow? I presume that the expectation of goenv users is for the tool to behave like rbenv, pyenv, etc. where changing into a folder with a local override will immediately setup the environment with all the right paths.

@cacack
Copy link

cacack commented Jul 9, 2022

I found my way here for this exact reason. Use pyenv on a daily basis so expecting goenv to function similarly. Following the instructions I added this in my zsh setup:

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
if (( $+commands[goenv] )); then
  eval "$(goenv init -)"
  export PATH="$GOROOT/bin:$PATH"
  export PATH="$PATH:$GOPATH/bin"
fi

This results in the same issue OP describes. Removing the exports from my if block like so

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
if (( $+commands[goenv] )); then
  eval "$(goenv init -)"
fi

results the correct behavior I was looking for.

❯ which go
/home/me/.goenv/shims/go

❯ goenv versions
* system (set by /home/me/.goenv/version)
  1.17.0

❯ go version
go version go1.18.3 linux/amd64

❯ go local 1.17.0
go local: unknown command
Run 'go help' for usage.

❯ goenv local 1.17.0

❯ goenv versions
  system
* 1.17.0 (set by /home/me/.go-version)

❯ go version
go version go1.17 linux/amd64

@sarim
Copy link

sarim commented Nov 13, 2022

Whats going on guys? We experienced the same issue and we had this in bash as instructed by INSTALL.md

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"

Removing the bottom two line solves the issue, at least it looks like solved for now. What is the correct behavior? If these lines are not needed, then why INSTALL.md tells (and says its recommended) you to add these? @neersighted @debo

https://github.com/syndbg/goenv/blob/0269402ebf9b82031c1bf35748ba5c9b895243d0/INSTALL.md?plain=1#L40-L44

@EmadMokhtar
Copy link

Whats going on guys? We experienced the same issue and we had this in bash as instructed by INSTALL.md

export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
export PATH="$GOROOT/bin:$PATH"
export PATH="$PATH:$GOPATH/bin"

Removing the bottom two line solves the issue, at least it looks like solved for now. What is the correct behavior? If these lines are not needed, then why INSTALL.md tells (and says its recommended) you to add these? @neersighted @debo

https://github.com/syndbg/goenv/blob/0269402ebf9b82031c1bf35748ba5c9b895243d0/INSTALL.md?plain=1#L40-L44

I'm having the same problem and commenting the lines won't fix it for me. I tried to install goenv via homebrew but still the problem exists.

@EmadMokhtar
Copy link

The go vesion will update once I update the shell.

❯ go version
go version go1.19.3 darwin/amd64
❯ goenv local 1.19.4
❯ go version
go version go1.19.3 darwin/amd64
❯ exec $SHELL
❯ go version
go version go1.19.4 darwin/amd64

@sarim
Copy link

sarim commented Jan 8, 2024

I know i'm kinda necro-bumping, but I fiddled a bit more today and ended up with this in bashrc

export GOENV_ROOT="$HOME/.goenv"
export PATH="$PATH:$GOENV_ROOT/bin"
eval "$(goenv init -)"
unset GOROOT
unset GOPATH

I'm unsetting GOROOT and GOPATH because those values are only set at init. And as I navigate through different go version enabled directories, those env variables becomes wrong, so they become a source of confusion. unsetting them solves the confusion.

As I'm not putting not putting $GOPATH/bin,$GOROOT/bin in PATH, there is no conflict. all go commands are run by goenv shims, shims set the correct GOPATH/GOROOT env just before executing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants