Goで書きはじめて最初の壁は、実はファイルの配置なのではないでしょうか。 サンプル的に書いてみる場合もそうですし、テストとしてレポジトリを作ってみた際にどうしたらいいのかわからない、という場合があるかと思います。
2017/02現在、我々がなんだかんだで一番簡単だと考えているのは、$GOPATH/src/(パッケージ名) という構造にすることです。 この場合、パッケージ名は(他とかぶらなければ)なんでもいいわけですが、我々はgitを使っているので、 $GOPATH/src/(gitサーバー名)/(パッケージ名) というように、gitレポジトリと同一にしています。
この結果、ソースコード内でのパッケージ指定も
import ( // … “(gitサーバー名)/(パッケージ)” //… )
となります。
次に、外部パッケージは glide で設置します。もしglideが入っていない場合は、 go install github.com/Masterminds/glide とします。 ほとんどの場合バイナリだけで良いので、ここで go get する必要はありません。
$GOPATH/src/(パッケージ名)内で glide createないし glide create --non-interactive すると glide.yaml が生成されます。
glide.yamlの編集が終わったら、その場で glide up を実行します。 少し時間がかかりますが、外部パッケージを依存関係込みで $GOPATH/src/(パッケージ名)/vendor 以下に設置してくれます。
なおこのglide.yamlはgit管理に含めておきます。 別の環境でも glide up で同じ外部パッケージを揃えるためです。
なお、既存glide.yamlが存在している状態で外部パッケージを追加する場合は、 glide get (外部パッケージ) で、vendor/以下への設置とglide.yamlへの追加が行われます。
コンパイルチェックやローカルビルドを作る場合には、$GOPATH/src/(パッケージ名)/build ディレクトリを作成しておいて、go build -o ./build/(パッケージ名) とするようにしています。 この ./build ディレクトリは通常、 .gitignore でgit管理から除外していますが、デプロイ・運用方法によっては使っていくこともありえます。
なおこの際、起動時使用する設定ファイルやHTMLテンプレートなどを入れておくディレクトリもついでに作成しておきます。
ということで、細かい点はあるのですが、ざっくりとこんな感じになるかと思います。 実際にやる場合はその細かい点が重要になったりするわけですが…。