Go Import
整理關于 import 報錯的分析及解決方法,希望通過此文可解決97%的import問題,3%可能與IDE有關,
1 import 程序理解:
首先明確 GOROOT 和 GOPATH 絕對路徑,通過命令列go env即可查看,
包依賴參考的尋找程序:舉例*.go檔案中 import "custompkg"會查找如下路徑:
<GOROOT>/src/custompkg表示from $GOROOT;<GOPATH>/src/custompkg表示from $GOPATH;<GOPATH>/src/<projectName>/vendor/custompkg表示 vendor tree,如果沒有用GOVENDER,參考GOMOD;<GOPATH>/src/<projectName>/src/custompkg表示from $GOPATH;
可見對于自定義的GOPATH中,我們需要創建一個src檔案夾(其實應該同時創建3個檔案夾bin, pkg, src),然后在src中創建不同project的檔案夾,每個project中再創建3個檔案夾(bin,pkg,src),
對于自定義的包檔案夾通常創建在<GOPATH>/<projectName>/src檔案夾中,例如:

圖1中,util為自定義包檔案夾,其中包含多個*.go檔案,每個*.go檔案包含不同功能函式,當main.go中呼叫自定義包中不同*.go檔案中的這些函式時,只要在main.go中import包路徑即可:
import (
"fmt"
util "project1/src/util"
)
注釋:
-
"project1/src/util"的位置在
<GOPATH>\src\檔案夾中, -
最開頭的util是別名alias,可自定義,呼叫時寫
<alias>.函式名(),對于自定義的包強烈推薦加別名,且建議和包名相同,
如果不加別名,有如下要求:
2.1 自定義的包檔案夾命名中不能包含特殊字符例如_, -, +等;
2.2 包檔案夾中所有*.go檔案首行package名就是呼叫方法的類名,

-
在同一包檔案夾下的不同*.go檔案中第一行的 package <包名> 必須相同,建議和包檔案夾名相同,
-
import包檔案夾名,就會import此包檔案夾下的所有*.go檔案,即包檔案夾中的所有函式都可用,
-
import 只能包檔案夾,不能以
/結尾,也不能是具體的*.go檔案,
總結自定義包建議:
1 自定義包檔案夾下的不同*.go檔案中首行的package名必須相同,建議和包名相同;
2 import含路徑的包名強烈建議加別名,呼叫方法時用別名呼叫;
3 自定義包檔案夾命名不建議包含特殊字符,
import Error 案例:
Symptom: could not import errors (cannot find package "errors" in any of c:\go\src\errors (from $GOROOT)...)
在VS Code中,import 標準庫出現如上報錯,或已經確認在$GOROOT\src和$GOPATH\src和\Users\<userName>\go\src中存在指定的檔案夾,但是仍然報無法找到包的錯誤,

Cause: 查看發現自定義包檔案夾下每個*.go檔案首行的package <包名>有不一樣的,
Solution: 同一包檔案夾下不同*.go檔案中package包名要求相同,
例如VS Code中,重新打開此專案檔案夾即可,或者修改一下package名為任何未使用過的名,再改回來,報錯即消失,
類似的報錯,會因為修改package的先后順序而出現Symptom中的錯誤,此時建議確保package后的命名和import檔案夾相同即可,但不強制要求,

以上內容來自個人總結自測,如有誤導歡迎各位大神留言更正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/244336.html
標籤:區塊鏈
上一篇:2021-01-01
下一篇:非對稱加密演算法應用
