golang包引用解析
環境變數配置如下:
- GOROOT----[
C:\Go
]
- GOPATH----[
F:\workspace\go_home
]
vs code配置如下:
F:\workspace\go_home
是總的golang
工作空間, 在下面建立兩個必須的目錄 src
(必須[F:\workspace\go_home\src
]), pkg
(必須[F:\workspace\go_home\pkg
]), bin
(非必須. go intanll
時自動建立).
以後每一個單獨的項目都是在 F:\workspace\go_home
單獨建立一個目錄. 比如下面:
F:\workspace\go_home\src\test1
F:\workspace\go_home\src\test2
test1
和 test2
這是兩個不同的項目. golang
主要是通過這樣的目錄結構, 來管理組件的關係. 使用包(package
)這種文法元素來組織源碼,所有文法可見度均定義在package
這個層級
其中重要的是, 要理解應用程式套件的定義. 應用程式套件就是一個個獨立的包體, 一個包一般是某個功能的源碼檔案組成的目錄(可以有多層的子目錄屬於這個包). 其他在最頂層的包目錄, 一般還會有個test
檔案,用於單元測試.
那麼程式怎麼運行呢?
在項目頂層建立一個main.go
(程式運行入口), 包名注意一定是 package main
.
看例子, 以下是整個demo的檔案結構:
F:\workspace\go_home\src\test\calculate\calculate.go
//calculate.gopackage calculatefunc Mysqrt(val float64) float64 { z := 0.0 for i := 0; i < 1000; i++ { z -= (z*z - val) / (2 * val) } return z}
F:\workspace\go_home\src\test\hello\hello.go
//hello.gopackage helloimport "fmt"func Hello() { fmt.Println("hello")}
F:\workspace\go_home\src\test\main.go
//main.gopackage mainimport ( "fmt" "test/calculate" //這裡import的是目錄名, 不是包名字, 在golang中, 包名可以和目錄名不一致的 "test/hello" //這裡import的是目錄名, 不是包名字, 在golang中, 包名可以和目錄名不一致的)func main() { hello.Hello() //注意注意注意: 這裡應用的是包名, 不是目錄名 fmt.Println(calculate.Mysqrt(5))}
//這裡import
的是目錄名, 不是包名字, 在golang
中, 包名可以和目錄名不一致的
//注意注意注意: 這裡應用的是包名, 不是目錄名
這兩個主要是要注意的, 總的來說是 import 的是包的路徑, 引用包的東西是使用包名