問題描述
D:
|——program
|——Code
|——go
|——src
| |——goStudy
| |——self
| |——main.go
| |——Interface
| |——test_interface.go
|——pkg
|——windows_amd64
|——goStudy
|——self
|——interface.a
- Interface 包下面有一個 test_interface.go 檔案
package Interface
type coder interface {
code()
debug()
}
type Gopher struct {
language string
}
func (g Gopher)code() {
fmt.Printf("I am coding %s language.\n", g.language)
}
func (g *Gopher)debug() {
g.language = "golang"
fmt.Printf("I am debugging %s language.\n", g.language)
}
func TransValueTest() {
var c Gopher = Gopher{language: "go"}
c.debug()
}
package main
import "goStudy/self/Interface"
func main() {
Interface.TransValueTest()
}
D:\program\Code\go\pkg\windows_amd64\goStudy\self裡面執行下面這條指令
go tool compile -S main.go
can't find import: "goStudy/self/Interface"
- 很奇怪不知道為什麼錯了,後來搜尋各種解決方案,終于找到了方法。
解決方案
- 第一步,它不是找不到 “goStudy/self/Interface” 這個嗎,那麼我們要将 Interface 包編譯成 .a 檔案,類似于 C 語言裡的動态連結庫。
//在任意一個目錄裡打開 cmd,然後執行下面這個指令
go install goStudy\self\Interface
//為什麼從 goStudy 目錄開始呢,你可以在控制台裡輸入 echo %GOPATH% 指令,檢視你電腦的 GOPATH 路徑
//我電腦裡的 GOPATH 路徑是 D:\program\Code\go,然後上面的 goStudy 就在 %GOPATH%\src 路徑下
//一般在使用 go 指令去操作 go 代碼時,我們的 go 編譯器會去 %GOROOT%\src 和 %GOPATH%\src 下尋找要操作的 go 代碼
- 第二步,我們找到上一步獲得的 .a 檔案在哪裡,一般情況下,通過 go install 指令産生的檔案都在 %GOPATH%\pkg 檔案夾下。
D:\program\Code\go\pkg\windows_amd64\goStudy\self
- 最後一步,我們重新執行最開始的那個指令,不過稍稍有點不一樣。
go tool compile -S -I D:\program\Code\go\pkg\windows_amd64 main.go