【Golang】go mod を理解せず自作の package を動かす
概要
バージョンいくつかは知らんが、あるバージョンから go mod やらで既存の記述での自作 package が使えなくなってしまった。
go mod を理解して使おうという気は無いので、動けば OK 程度に既存の環境からの変更を記録する。
環境
PC:M1 Macbook Sonoma
Go
> go version
go version go1.21.6 darwin/arm64
既存環境(昔の記述:今これじゃ動かないよ(?))
ディレクトリ構造
> tree
.
├── main.go
└── testlib
└── testfunc.go
2 directories, 2 files
ファイル記述
main.go
package main
import "./testlib"
func main() {
println("hello from main func")
testlib.TestFunc()
}
testfunc.go
package testlib
func TestFunc() {
println("Hello From TestLib")
}
動かしてみる(動かない)
> go run main.go
main.go:3:8: "./testlib" is relative, but relative import paths are not supported in module mode
更新手順
ディレクトリ位置(ホームまでは省略)
> pwd
~/work/forqiita
1. go mod init する
現在の作業ディレクトリが ~/work/forqiita
なので以下のコマンドを実行する
go mod init forqiita
実行例
> go mod init forqiita
go: creating new go.mod: module forqiita
go: to add module requirements and sums:
go mod tidy
go mod tidy しろという表示がでるが 無視する
実行後に go.mod
ファイルが生成されていることがわかる
> tree .
.
├── go.mod
├── main.go
└── testlib
└── testfunc.go
2 directories, 3 files
> cat go.mod
module forqiita
go 1.21.6
2. main.go を編集する
上記 main.go
の 3 行目の自作パッケージの import を変更する。
- import "forqiita/testlib"
+ import "./testlib"
変更後
main.go
package main
import "forqiita/testlib"
func main() {
println("hello from main func")
testlib.TestFunc()
}
以降は普通に実行できる(はず)
> go run main.go
hello from main func
Hello From TestLib
他者の package を github 等から使いたいときはまたお作法が違いそうなので気をつけたい