問題來源於編寫代碼時,某些功能需要復用,於是我把它們功能提出來放到單獨的utils.go文件中。但是卻不知道該怎么import自己的go文件,使得能調用其中的函數,故做此筆記。供使用GoLand開發的童靴參考。
1、引入:默認GOPATH的解決方法
原理:根據go項目工程結構來看,我們需要在$GOPATH/src目錄下存放go文件,才能正常引用。按照錯誤提示,選擇Create Directory practice at D:/Go/src,再在其中practice文件夾中放入go文件即可正確引用

但我希望把要引用的包和其他代碼就放在同一個項目里,這種方法顯然不行,於是我們需要配置GoLand以便支持自定義包在項目中的導入。
2、修改GOPATH的解決方法
2.1、規范的目錄結構
摘取官方文檔的說法:
Go代碼必須放在工作空間 ($GOPATH) 內。它其實就是一個目錄,其中包含三個子目錄:
src目錄包含Go的源文件,它們被組織成包(每個子目錄都對應一個包)pkg目錄包含包對象bin目錄包含可執行命令
go 工具用於構建源碼包,並將其生成的二進制文件安裝到 pkg 和 bin 目錄中。
src 子目錄通常包會含多種版本控制的代碼倉庫 (例如Git或Mercurial), 以此來跟蹤一個或多個源碼包的開發。
.
├── bin/
| ├── streak #可執行命令
| └── todo #可執行命令
├── pkg/
| └── windows_amd64/
| └── ...
└── src/
├── common/
| ├── ...
| └── utils.go
├── other/
| ├── ...
| └── ...
└── main/
└── main.go
所以,我們的項目應該按這種目錄存放文件。將編寫的源代碼放入src目錄中。
2.2、GoLand修改Project GOPATH
打開GoLand -> File -> Settings

-> 展開Go -> GOPATH -> 在下方的"Project GOPATH"中添加項目所在文件夾 -> OK

2.3、示例:導入自定義包
在main.go中,引入common包下的utils.go,並使用UtilsFunc()函數:
import (
...
"common" //utils.go文件必須放在common文件夾下,第一句聲明為package common
)
func funcname() {
...
temp := common.UtilsFunc() //調用utils.go中的函數,需要通過包名common來調用
_ = temp
}
3、公共參數和函數的要求
在Go語言中嚴格區分字母大小寫。
- 如果變量名/函數名/常量名首字母大寫,則可以被其他包訪問(公有)
- 如果變量名/函數名/常量名首字母小寫,則不能被其他包訪問(私有)
可以同時聲明 str 和 Str 兩個變量!其中str只能被本包訪問,Str能被其他包訪問。
在utils.go中聲明var str string和var Str string,其他包中查看到的情況:
參考文章
[2] GoLand導入自定義包
搭建Go開發環境(包括Linux、Windows、Mac)、GOPATH目錄含義、go項目工程結構、如何使用命令行安裝程序(
go install)、跨平台編譯、獲取遠程包、獲取gitlab私有庫包等可以繼續查看第一篇參考文章。

