gb
commands operate on a project. A gb
project is a workspace which contains all the source needed to build and test your library or application.
A gb
project is a folder on disk that contains a sub directory named src/
. That’s it, no environment variables to set. For the rest of this document we’ll refer to your gb project as $PROJECT
.
gb
projects differentiate between your stuff—the code you’ve written—and their stuff—the code that your code depends on. We call their stuff “vendored code”. gb
makes a distinction between your code and vendored code.
Inside a gb
project, your stuff—the source code of your project—goes in:
$PROJECT/src/
The source code that others have written—their stuff—goes in:
$PROJECT/vendor/src/
gb
projects do not live inside your $GOPATH
, nor does gb
require you to set or update $GOPATH
to use it.
gb
does not use go get
to manage a project’s dependencies; the owner of the project should copy any code on which project depends on into the $PROJECT/vendor/src/
directory.
gb
projects can be retrieved using go get
, but cannot be built by the go tool as they do not follow the convention required by go get
.
Creating a gb
project is as simple as creating a directory:
% mkdir -p $HOME/code/demo-project
Obviously if you like to arrange your source code in another way, you’ll choose different name for your project’s directory. From now on we’ll refer to $HOME/code/demo-project
as $PROJECT
. We call this directory the project root.
Now you have created a project, you will need to create a folder inside your project root directory to hold your source code:
% mkdir -p $PROJECT/src % tree $PROJECT /home/dfc/code/demo-project └── src
Note: gb
requires you to place all your code in packages inside $PROJECT/src/
. Code placed at the root of your projects src/
directory will not be built; see issue #46.
Inside your source directory, let’s create a package:
% mkdir -p $PROJECT/src/hello % tree $PROJECT /home/dfc/code/demo-project └── src └── hello
Next, let’s add a source code file to the package:
% cat <<EOF > $PROJECT/src/hello/hello.go package main import "fmt" func main() { fmt.Println("Hello gb") } EOF % tree $PROJECT /home/dfc/code/demo-project └── src └── hello └── hello.go
Now that your project has some code in it, we can compile and run it:
% gb build all hello % bin/hello Hello gb % tree $PROJECT /home/dfc/code/demo-project ├── bin │ └── hello └── src └── hello └── hello.go
Now that you’ve created a gb
project, you should share that project with others by checking the entire contents of $PROJECT
into the source control repository of your choosing. This includes any source you have copied from other projects into your $PROJECT/vendor/src/
directory. You don’t need to track $PROJECT/pkg
nor $PROJECT/bin
.