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を積極的に使っていこうと思います。