無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

golangのディレクトリ構成について悩む

今年もあと僅かで終わる今日このごろですが、ようやく本腰上げてGoでバックエンド書き始めようとしました。

しかし早速ハマるディレクトリ設計_(:3」∠)_ 本来Goは$GOPATH配下で開発を進めます。しかし、今回はフロントエンド側のコードも含めてgithub上でgit管理したいのでこんな構成にしたい。

/
├  docker/
├  app/
└  front/

appというのがGoのAPI実装ですね。

参考書や、https://golang.org/doc/code.html を見る限り$GOPATH/github.com配下に管理されるべきなのですが、Go以外のコードが含まれているのに$GOPATH配下にあるの気持ち悪いなーと思うんです(´・ω・`)とはいえ、$GOPATH以外で開発しようとするとライブラリ周りの部分で面倒そうな対応が必要そうな予感がして面倒だな、と。

さて、この構成どうしたものか。
いろいろ考えたんですが、一番良いのは開発をdocker上に乗っけて、依存関係をdepで解決させることでした。上記でやりたかった構成を適用すると、ざっくりこんな配置になります。

/
├  docker/
│     -  app/
│       └ (今回はイメージそのまま使うのでcomposeへ)
│     - docker-compse.yml
├  app/
│     - code ....
└  front/
         - code ...
         - node_modules

golangのイメージをベースにこんなdocker-composeを書きます。

version: '3'
services:
  app:
    image: 'golang:latest'
    volumes:
      - 'data:/go'
      - '../app/.:/go'
    ports:
      - "8080:8080"
    command: 'go run main.go'
volumes:
  data:
    driver: 'local'

main.goについては、https://qiita.com/macoshita/items/827ae5ac245b94ed4b4c を参考に、8080ポートで待ち受けるやつを適用に書いて動作確認が完了。

docker上の/goに、appディレクトリをマウントして上げれば希望のことが実現できました。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】