Import Local Packages with Go Modules

一開始,根據官網文件建立一個 hello world 範例。檔案結構如下列:

$ tree .
.
└── example.com
    └── user
        ├── hello
        │   ├── go.mod
        │   └── hello.go
        └── morestrings
            ├── go.mod
            └── reverse.go

當我嘗試使用 morestrings module 時,不管我把它放在哪裡,都只會收到「找不到 module」的錯誤訊息:

$ go run hello.go         
go: example.com/user/[email protected]: unrecognized import path "example.com/user/morestrings": reading https://example.com/user/morestrings?go-get=1: 404 Not Found

感覺一定要先把 module 放進 VCS 才能取得……?在我真的這麼做之前,找到了引入 local module 的做法:修改 go.mod 的 requirement 就可以了

原本的 go.mod 內容是這樣:

# example.com/user/hello/go.mod
module example.com/user/hello

go 1.14

require example.com/user/morestrings v0.0.0

再加上一列:

replace example.com/user/morestrings => ../morestrings

可以直接使用編輯器修改,也可以透過 CLI 修改:

$ go mod edit -replace example.com/user/morestrings=../morestrings

這樣就能使用 local module 了

$ go run hello.go                  
Hello, Go!