shalakhin
shalakhin

Reputation: 4866

How does Go update third-party packages?

Looking how actively golang packages grow and improve I wonder how the problem with package versions is solved?

I see that one way is to store third-party packages under a project folder.

But what if I install it with go get?

Upvotes: 272

Views: 236386

Answers (9)

Zerta
Zerta

Reputation: 195

If you want to upgrade a version from a specific branch, you can use:

go get -u <path-to-repo>@<branch>

Upvotes: 3

Toid
Toid

Reputation: 61

Since this is one of the top hits when googling, I just wanted to add that for 1.17 "installing executables with 'go get' in module mode is deprecated".

  • go get -d
    • For dependencies of the current module
  • go install
    • For requirements of the current module
  • go install <with_version>
    • To install ignoring the current module, i.e: 'go install example.com/cmd@latest'

https://golang.org/doc/go-get-install-deprecation

Upvotes: 6

kiki_ygn
kiki_ygn

Reputation: 103

Go to path and type

go get -u ./...

It will update all require packages.

Upvotes: 3

Luke W
Luke W

Reputation: 8944

To specify versions, or commits:

go get -u [email protected]

go get -u otherpackage@git-sha

See https://github.com/golang/go/wiki/Modules#daily-workflow

Upvotes: 12

F566
F566

Reputation: 645

go 1.13

(exec from module root directory)

Update specified dependencies:

go get -u <package-name>

Update all direct and indirect dependencies to latest minor or patch upgrades (pre-releases are ignored):

go get -u ./...
# or
go get -u=patch ./...

Reference:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get

Upvotes: 4

user2317487
user2317487

Reputation:

The above answeres have the following problems:

  1. They update everything including your app (in case you have uncommitted changes).
  2. They updated packages you may have already removed from your project but are already on your disk.

To avoid these, do the following:

  1. Delete the 3rd party folders that you want to update.
  2. go to your app folder and run go get -d

Upvotes: 14

dtx
dtx

Reputation: 636

Since the question mentioned third-party libraries and not all packages then you probably want to fall back to using wildcards.

A use case being: I just want to update all my packages that are obtained from the Github VCS, then you would just say:

go get -u github.com/... // ('...' being the wildcard). 

This would go ahead and only update your github packages in the current $GOPATH

Same applies for within a VCS too, say you want to only upgrade all the packages from ogranizaiton A's repo's since as they have released a hotfix you depend on:

go get -u github.com/orgA/...

Upvotes: 24

tux21b
tux21b

Reputation: 94789

go get will install the package in the first directory listed at GOPATH (an environment variable which might contain a colon separated list of directories). You can use go get -u to update existing packages.

You can also use go get -u all to update all packages in your GOPATH

For larger projects, it might be reasonable to create different GOPATHs for each project, so that updating a library in project A wont cause issues in project B.

Type go help gopath to find out more about the GOPATH environment variable.

Upvotes: 409

Salvador Dali
Salvador Dali

Reputation: 222869

@tux answer is great, just wanted to add that you can use go get to update a specific package:

go get -u full_package_name

Upvotes: 107

Related Questions