Golangのファイル配置&セットアップ例 2017/2版


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テンプレートなどを入れておくディレクトリもついでに作成しておきます。

ということで、細かい点はあるのですが、ざっくりとこんな感じになるかと思います。 実際にやる場合はその細かい点が重要になったりするわけですが…。

最新記事

すべて表示

SQLite(sqlite3)で “no such table”

小ネタです。 SQLiteを使っていて "no such table" とエラーが出た場合、 DBファイル名の指定が空になっている、という凡ミスを起こしていないかを確認してみましょう。 ・・・ そういう凡ミスをしてしばし悩んだので… ファイル名の指定が空になっている場合、一時的なインメモリDBとして保存されます(※1)。 つまりDB接続を切断すると中身は消えます。 なので接続

アプリケーションサーバにポートを指定せずに起動すると?

最近、 Goで書かれたアプリケーションサーバが起動しない! ->原因: .env ファイルが欠けていた というドタバタがありました。 結局Goと関係ないですが、この時、 「あまりGoに慣れてないのでGoの問題かと…」「DockerまだよくわかってなくてDockerの問題かと…」 というような声があったのて、あえてGoで検証してみようと思ったわけです。 さて、Goでサーバサイドのシステムを作

GitLab 9.1.2 (MySQL) を 11.4.0 (PostgreSQL) にアップグレード

弊社ではかなり前からGitLab(CE)を自社環境で運用しているのですが、ふと気付くと、バージョンがだいぶ先に行ってしまっていました。 とくに最近のバージョンでは Auto DevOps なども使えるようになっていたりするので、さすがにそろそろキャッチアップしたいと考えたわけです。 現行の環境は次の通りです: GitLab 9.1.2 sameersbn/gitlab 使用 MySQL 5.6