Golangでプログラムを書いていて、プログラムが長くなってきたので、パッケージに分けてみました。
構成
ディレクトリ構成は下記のような感じ。
. |-- a | `-- a.go |-- b | `-- b.go `-- main.go
手順
方針
Go Modules を使って、プログラムを1つのモジュールにして、モジュールからのパスでパッケージを指定します。
モジュール設定
プログラムを適当な名前でモジュールにします。
go mod init test-module
ディレクトリにgo.modというファイルが作成されます。
module test-module go 1.14
使い方
importから「<モジュール名>/<パッケージ名>」で読み込みます。
package main import( "test-module/a" "test-module/b" ) func main(){ a.Test() b.Test() }
Go Modulesって便利だなぁ
Go Modulesは、そのプログラムが使うパッケージをまとめて管理する機能のようです。
go getで1つ1つimportしたパッケージのインストールをしなくても、go buildでimportに記載されいているパッケージを、自動でインストールしてくれるのでとても便利です!(go getによるインストールも可能です)
go getやgo buildでパッケージがインストールされると、go.modファイルに追記されていきます。
go.modファイルがあれば、ビルド時にそこに記載されているパッケージを自動でインストールしてくれるので、Dockerなど、パッケージがインストールされていない新しい環境でセットアップする時も、go buildだけで済んで、go getの作業がいらないのでとても便利です!
使われるパッケージのバージョン固定とかもできるようですね。
JavaScriptにおける、npm・package.jsonみたいなものですかね。
import ( "./a" "./b" )
として、相対パスでローカルパッケージを使ってもいいのですが、他の機能が超便利なので、これからはGo Modulesを積極的に使っていこうと思います。