post Image
オレオレGo入門2016

自分が Go で誰かと何か作るなら、まずここまでを共有してからにしたい、という勝手な理由ですぐ見てもらえるところにこれ置いときます。

ディレクトリ

How to Write Go Code を読みましょう。ただし、これだけでは src の下に依存パッケージ置き場 vendor を置けることに言及してないので、Gopher Academuy Blog の Understanding and using the vendor folder で補うのが手っ取り早いです。

そのうえで、 Glide | Package Management For Go を使いましょう。チームメンバーに足りないパッケージをコツコツ $GOPATH/src/github.com/go get させず、チームが決めた依存パッケージが自動的に vendor にインストールされるようにしましょう。

/.../your/workspace/
  bin/
  pkg/
    darwin_amd64/
  src/
    your/product/
      .git
      main.go
      glide.yml
      vendor/
        github.com/
        gopkg.in/

一般的には、 異なるパッケージは個別にバージョン管理されるべき です。あなたは src に自分のパッケージ以外に、同僚のパッケージを置くかもしれません。チームメンバーの中には、あなたのパッケージを src 下に置いて再利用したい人がいるかもしれません。

インハウスなソフトウェアの場合は、パッケージ名をかならずしも github.com/... (のようなホスティングサービスのURL) で始める必要はないものとします。(GitHub で)パッケージを公開するとはかぎらないからです。とはいえユニークな名前空間を設けるのは必須です。

GOPATH

個人的に使いたいGoツールのために自分用の $GOPATH を決めましょう。これとワークスペースの $GOPATH とは別のものにします。

export GOPATH=$HOME/.go
export PATH=$HOME/.go/bin:$PATH

ワークスペースで作業するときは、第二の $GOPATH を追加します。your/workspace/bin にインストールしたプロジェクトワークスペース固有のコマンドを使うかもしれません。

cd your/workspace
export GOPATH=`pwd`:$GOPATH
export PATH=`pwd`/bin:$PATH

このとき kennethreitz/autoenv: Directory-based environments. が役に立つかもしれません。

IDE

複数のパッケージにまたがる開発の場合、パッケージ境界を明確に分けましょう。 分けられるのであれば、IDE プロジェクトのルートを $GOPATH ではなく個々のパッケージにします。

$GOPATH は複数のパッケージを収める作業場所です。IDE のフォルダツリーのルートが $GOPATH だと、src の下階層が無駄に深くなります。

IntelliJ IDEA にはひとつのプロジェクトに複数のモジュールを定義できます。Eclipse は起動時にワークスペースを選択でき、その配下に複数のプロジェクトを置けます。(そんなに詳しくないんで合ってるかな)

PhpStorm など複数コンテキストが苦手な IDE の場合は、2016.3 で追加されるこの機能が役に立つかもしれません: Opening Many Project in One Frame | PhpStorm Blog

Docker

Mac/Windows で開発している人は、Linux にデプロイする前に Docker for Mac/WindowsDocker標準のGo言語イメージ を使って Linux バイナリとしての挙動を確認します。

公式イメージは、ファイルシステムのトップレベルに /go があり、$GOPATH となっています。また、そこがカレントディレクトリで始まります。src だけ (もしくは関係あるパッケージのディレクトリとその vendor) をホストと共有することで、 でバイナリの格納フォルダは分離できます。

/
  go/     # WORKDIR がここで $GOPATH もここ
    bin/  # ここはコンテナ固有のファイルが入る
    src/  # ホストと共有

まずは対話的にツールを試し、自動化していてわからなくなったら、いつでもここに戻って来れるようにしましょう。

$ docker run -v your/workspace/src:/go/src -it golang                                                
root@8ac8d75a8aae:/go# pwd
/go
root@8ac8d75a8aae:/go# ls
bin  src
root@8ac8d75a8aae:/go# go run src/....

決まったことを何度も行うときは --rm を付け、自分のプロセス終了と同時にコンテナを消すようにしましょう。(対話シェルでも --rm やるべきかも)

$ docker run -v your/workspace/src:/go/src -p 8080:8080 \
-it --rm golang go run src/your/package/main.go

docker-compose で同じことを再現できるようにしておきましょう。

version: 2
services:
  service1:
    image: golang
    command: go run src/your/package/main.go
    volumes:
      - your/workspace/src:/go/src
    ports:
      - 8080:8080
  service2:
      :
      :  

『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。