A sample gb project

A picture is worth a thousand words, so let’s look at a sample gb project.

The sample repository is here: github.com/constabulary/example-gsftp.

Clone this project, checking out the code anywhere that you like. There is no requirement to check it out inside your $GOPATH.

% cd $HOME/devel
% git clone https://github.com/constabulary/example-gsftp
Cloning into ‘example-gsftp’…

Let’s have a look at the project on disk:

% cd example-gsftp
% tree -d $(pwd)
/home/dfc/devel/example-gsftp
├── src
│   └── cmd
│       └── gsftp
└── vendor
    └── src
        ├── github.com
        │   ├── kr
        │   │   └── fs
        │   └── pkg
        │       └── sftp
        │           └── examples
        │               ├── buffered-read-benchmark
        │               ├── buffered-write-benchmark
        │               ├── streaming-read-benchmark
        │               └── streaming-write-benchmark
        └── golang.org
            └── x
                └── crypto
                    └── ssh
                        ├── agent
                        ├── terminal
                        ├── test
                        └── testdata

23 directories

You can build the project with gb build. gb prints out each package’s name as it compiles it.

% gb build
github.com/kr/fs
golang.org/x/crypto/ssh
golang.org/x/crypto/ssh/agent
github.com/pkg/sftp
cmd/gsftp

This project contains a “command” package, cmd/gsftp, which is built and copied to $PROJECT/bin/gsftp.

Note: Your commands don’t need to live in $PROJECT/src/cmd, but you cannot place source at the root of $PROJECT/src because that package would not have a name.

This project uses gb-vendor to manage its dependencies, so let’s have a look at what has been vendored.

% gb vendor list
github.com/kr/fs        https://github.com/kr/fs        master  2788f0dbd16903de03cb8186e5c7d97b69ad387b
golang.org/x/crypto/ssh https://go.googlesource.com/crypto/ssh  master  c10c31b5e94b6f7a0283272dc2bb27163dcea24b
github.com/pkg/sftp     https://github.com/pkg/sftp     master  f234c3c6540c0358b1802f7fd90c0879af9232eb

Next Up

Read more about getting started or setting up a gb project.