Go言語でローカルからパッケージをインポートする方法
![](https://tech.aru-zakki.com/wp-content/uploads/2024/01/go-import-localfile.001.jpeg)
Go言語でパッケージをローカルのフォルダのパッケージをインポートする場合に、毎回ハマるのでメモ書きです。
サブディレクトリのパッケージをインポートする
ここでは、モジュールの配下のディレクトリ(フォルダ)にあるパッケージのインポート方法について説明します。このパターンが一番多いと思います。
フォルダ構成
実験で作成したファイルとフォルダ構成は以下になります
- モジュールのフォルダ直下にmain.go(mainパッケージ)を配置
- calcフォルダにcalcパッケージを配置
- go.modは
go mod init
で生成
.
├── calc
│ └── calc.go
├── go.mod
└── main.go
それぞれのファイルの内容
main.go
mainパッケージです。calcパッケージのAddを呼び出しています。
モジュール配下のパッケージを読み込む場合は、import "<モジュール名>/<パッケージ名>"
で読み込むことができます(パッケージが複数階層になっている場合もOK)。
package main
import (
"fmt"
"sample/calc"
)
func main() {
fmt.Println("x", calc.Add(10, 20))
}
calc/calc.go
calcパッケージです。Go言語の命名ルールとして、外部から参照する関数は大文字から始めることを忘れないようにします(Add
のA
が大文字になっていることに注意)
package calc
func Add(a, b int) int {
return a + b
}
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
パッケージ外から参照される関数の名前は大文字から始めなければならないことは忘れがちです。小文字だと外部からはアクセスできないので注意
go mod を使う
以下のコマンドでgo.modファイルを生成します
go mod init sample
sample
の部分は「モジュール名」です。githubで管理している場合は、/github/<ユーザ名>/<リポジトリ名>の形式になりますが、ローカルのみの場合はなんでもOKです。
module sample
go 1.21.5
モジュール配下のパッケージを参照する場合は、go.modになにも追加する必要はありません。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
今回の記事を書いている時に、結構エラーが発生しました。理由は不明です・・・
![](https://tech.aru-zakki.com/wp-content/uploads/2023/07/cat2-e1688625674820.png)
うまくいかない場合は、手順を変えてみてください。今回は、main.go
, calc.go
を作成した後、go mod init
の手順でうまくいきました。
まとめ
Goのモジュール関連は、Goのバージョンが変わって何度か修正されています。以前のやり方がうまく動かないことがあるので、記事とバージョンが異なる場合は注意しましょう。