LoginSignup
0
1

More than 3 years have passed since last update.

ローカル(ソース非公開)プロジェクトでGo言語の推奨ディレクトリ構成(golang-standards/project-layout)を使う

Posted at

go version go1.15.2

Go言語コミュニティの推奨ディレクトリ構成に従い、標準のパッケージ管理システムである「Go Modules」を使おうとして微妙にハマった。
自サイトに同じ記事をメモとして書いたが、ツッコミが欲しくなったのてQiitaにも投下しておく。

ディレクトリ構成例

エクスクラメーションマーク(!)が付いている名前(及び下位要素)は、任意の識別子です。

my_project(!)
├── web # Webシステムで使うシステム外リソース。jsとか画像とか
├── assets # Webシステム以外で使うシステム外リソース。
├── cmd # mainモジュールを格納
│   ├── mainexe(!) # プロジェクト中の実行ファイル。この単位でbuild
│   │   └── main.go
│   └── confexe(!) # 別実行ファイル例
│       └── main.go
├── configs # 設定ファイル
│   └── main.yaml(!)
├── docs # ドキュメント。自分用なのでメモを突っ込んでる
│   └── readme.md
├── internal # 非公開モジュール
│   ├── app # このプロジェクト専用のモジュール。ビジネスロジック的な?
│   │   ├── mainexe(!) # 実行ファイル別に分ける
│   │   │   └ mainview # MVCSでいうService的な感じ?
│   │   │       └ mainview.go
│   │   └── confexe(!)
│   │       └ mainview
│   │           └ mainview.go
│   └── pkg # 非公開の汎用モジュール
│       └ my_lib(!) # なんか使い回すやつ
├── scripts # build時に使うshellなど
└── go.mod #Go Moduleで生成されるファイル

Go Modulsの初期化

cd my_project
go mod init 192.168.0.0/my_project
  • ソースは公開しない
  • 公開されているモジュールと絶対に被らない

という点で、ホスト名を192.168.0.0とした。

モジュールとして公開しない = go getで取得されることは無いので、ただの文字列以上の意味はない。(と思う)
ホスト名のルールであるピリオド(.)が入っていれば何でもいいはず。
cmd下(モジュール単位)ではなく、全体を含めて初期化する。

mainモジュールからinternal内のモジュールを使う

package main

import (
    "192.168.0.0/my_project/internal/app/mainexe/mainview"
)

func main() {
    mainview.SomeFunction()
}

これで問題なく使えます。

build

go build -o mainexe cmd/mainexe/*.go

oオプションは出力ファイル名指定。
上記例だとプロジェクトディレクトリ直下に出力される。
distとか適当にディレクトリを作って、出力先pathとして含めても良いかも。

個人的にはscriptsディレクトリ内にbuild.shを作成し、
上記コマンドを書いて「./scripts/mainexe_build.sh」で実行してます。

Golangは長いこと放置してたので、古い記事もありますがまだ初学者です。
ツッコミありましたらお願いしますm(_ _)m

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1