Goの自作パッケージがインポートできない。
自己紹介
こんにちは。新卒で大手SIerに入り3年目になりますナオトです。最近、技術力向上に目的として触れたことのない言語「Golang」を勉強し始めました。自分のアウトプットの場、そして自分と同じ境遇に陥った方々が早く解決できるよう、情報を発信していこうと思います。拙い文章で恐縮ですが、どうぞよろしくお願いいたします!
早速ですが、自作パッケージが動かない。。。
golangのパッケージについて学んでいたら、初期の初期で躓きました(笑)
自作パッケージをmainから呼び出そうとすると以下のエラーが出て意味わからず。。。
package golang/practice/foo is not in std
ディレクトリ構成と各ファイルは以下のとおり
`ディレクトリ構成`
golang/
├── practice/
├── foo/
│ └── foo.go
└── main.go
main.go
import (
"fmt"
"golang/practice/foo"
)
func main() {
fmt.Println(foo.Max)
fmt.Println(foo.ReturnMin())
}
foo.go
package foo
const (
Max = 100
min = 1
)
func ReturnMin() int {
return min
}
なぜこんな簡単な構成で正常終了しないのか、、、色々調べてやっとたどり着きました。
解決方法
ルートディレクトリ(今回だとgolang配下)で以下のコマンドを実行することでgo.modが追加され、
動くようになりました。
go mod init
実行したことにより、go.modがルートディレクトリ配下に出現。
ディレクトリ構成
golang/
├── practice/
│ ├── foo/
│ │ └── foo.go
│ └── main.go
└── go.mod
go.mod
module golang
go 1.23.0
その状態で再度実行してみると、なんと期待通りの結果が得られました(感動)
実行結果
100
1
上で挙げたコマンドはGoモジュールを初期化するコマンドのようです。go.modはモジュール名や依存パッケージ、Goのバージョンを管理するための大切なファイルであり、これがあることで外部パッケージの追加やモジュール単位でのパッケージ管理が正常に行えるとのこと。
少し時間がかかりましたが、答えにたどり着けてホッとしましたー
まとめ
今回、自作パッケージのインポートに苦戦しました。自分含め、初学者の方が陥りやすいエラーだと思います。今回は、パッケージ管理用のgo.modを配置することで解決できました。ファイルが一つないだけでシステムが動かないとは。。プログラミングは奥が深くてとても楽しいですね!
これからも情報発信をしていくのでよろしくお願いします!ありがとうございました!
Discussion