Coder Social home page Coder Social logo

How does goenv handle $GOPATH? about goenv HOT 8 CLOSED

go-nv avatar go-nv commented on September 21, 2024
How does goenv handle $GOPATH?

from goenv.

Comments (8)

athrunsun avatar athrunsun commented on September 21, 2024 1

@syndbg Thank you for your instructions! I'll try your recommendations!

from goenv.

kevbo avatar kevbo commented on September 21, 2024 1

As a newcomer to Go, I fell into the exact situation you outlined above (fresh goenv install, fresh install of 1.7.4, try to install something with go get and find out my $GOPATH isn't set). So where should I point GOPATH?

from goenv.

josegonzalez avatar josegonzalez commented on September 21, 2024 1

@kevbo you can basically do the same thing:

  • Install your golang versions with goenv
  • Set $GOPATH to the default of ~/go.
  • Always create repos within your ~/go path in the normal golang directory structure.
  • Create a .go-version in your repo to specify the golang version to use.
  • Use govendor to install deps to a vendor directory within your repository.
    • Add the following to your repo's gitignore:
      vendor/*
      !vendor/vendor.json
      
    • New versions of golang will pick this up as of 1.6.0. 1.5.0 will need export GO15VENDOREXPERIMENT=1. Older versions will need some love...

from goenv.

syndbg avatar syndbg commented on September 21, 2024

@athrunsun goenv combined with go-build (by default it's so) unsets GOPATH and GOHOME (ref: https://github.com/syndbg/goenv/blob/master/plugins/go-build/bin/go-build#L964) during install or uninstall (e.g goenv install 1.7.4, goenv uninstall 1.6).

After that it does nothing else. So for example if you do:

  1. Fresh goenv install
  2. goenv install 1.7.4
  3. goenv global 1.7.4
  4. go get github.com/petar/GoLLRB/llrb - you'll definitely need to have set $GOPATH beforehand.

tl;dr You must set $GOPATH by yourself.

from goenv.

athrunsun avatar athrunsun commented on September 21, 2024

Thanks for your reply, @syndbg !

Here is another question. From my understanding (please correct me if I understand anything wrong):

  • python: we cannot install multiple versions of a package using pip, different projects share the same set of packages unless using virtualenv or pyenv.
  • ruby: we can have multiple versions of a gem, different projects share the same set of gems unless using rvm or rbenv.
  • nodejs: we can install multiple versions of a package using npm, but usually we will have project specific dependencies in a sub folder node_modules.

Whose behavior is the closest to golang?

from goenv.

syndbg avatar syndbg commented on September 21, 2024

By default Go falls into

python: we cannot install multiple versions of a package using pip, different projects share the same set of packages unless using virtualenv or pyenv.

But I highly recommend using https://github.com/kardianos/govendor or https://github.com/tools/godep to get the best (imo) dependency management behavior that is:

nodejs: we can install multiple versions of a package using npm, but usually we will have project specific dependencies in a sub folder node_modules.

from goenv.

syndbg avatar syndbg commented on September 21, 2024

@kevbo $HOME/gocode is my preference. Note that in Golang 1.8 there's a default $GOPATH. https://beta.golang.org/doc/go1.8#gopath

from goenv.

kevbo avatar kevbo commented on September 21, 2024

@syndbg Thanks for answering that remedial question. Now I have another, more focused on goenv:

If most Golang projects are checked out/installed to GOPATH, how do you leverage goenv to pin a version of Golang to a specific project?

Apologies if that doesn't make sense or if I'm asking the wrong question. I might be looking for too much parity between Golang and Python, which I'm more familiar with. In Python, I use pyenv to keep multiple versions around. Then I'm able to pin a specific Python version to a project by dropping a .python-version file into the repo root. Finally, I'd create a virtualenv inside that directory for near-complete isolation for everything else.

from goenv.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.