Vendoring is a way to put dependencies in a Go project without having to mess with the GOPATH. The idea is simple, that is to put the dependencies in a directory called "vendor".
awesomego/
|-- foo (this directory contains a library, i.e. non-main package)
| `-- foo.go
|-- main.go (this is the main program)
`-- vendor (this is where the third-party libs live)
`-- goini
|-- goini.go
|-- goini_test.go
|-- LICENSE
|-- README.md
`-- testdata
|-- test_expected.ini
`-- test.ini
The project structure above has the following benefits.
- It can be used to build a library.
- It can be used to build an executable.
- It is go-gettable.
This is an example of using it in a standard Go workspace.
go-workspace/
`-- src
`-- awesomego
|-- foo
| `-- foo.go
|-- main.go
`-- vendor
`-- goini
|-- goini.go
|-- goini_test.go
|-- LICENSE
|-- README.md
`-- testdata
|-- test_expected.ini
`-- test.ini
To build it as a library:
GOPATH=`pwd` go install awesomego/foo
To build it as an executable:
GOPATH=`pwd` go install awesomego