天天看點

Go語言(使用)——go tool compile; can‘t find import: “ “

問題描述

  • 代碼目錄結構如下:
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()
}
           
  • main.go
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"
           
  • 很奇怪不知道為什麼錯了,後來搜尋各種解決方案,終于找到了方法。

解決方案

  1. 第一步,它不是找不到 “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 代碼
           
  1. 第二步,我們找到上一步獲得的 .a 檔案在哪裡,一般情況下,通過 go install 指令産生的檔案都在 %GOPATH%\pkg 檔案夾下。
    D:\program\Code\go\pkg\windows_amd64\goStudy\self
  2. 最後一步,我們重新執行最開始的那個指令,不過稍稍有點不一樣。
go tool compile -S -I D:\program\Code\go\pkg\windows_amd64 main.go