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.go
package calculate
func 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.go
package hello
import "fmt"
func Hello() {
fmt.Println("hello")
}
F:\workspace\go_home\src\test\main.go
//main.go
package main
import (
"fmt"
"test/calculate" //這里import的是目錄名, 不是包名字, 在golang中, 包名可以和目錄名不一致的
"test/hello" //這里import的是目錄名, 不是包名字, 在golang中, 包名可以和目錄名不一致的
)
func main() {
hello.Hello() //注意注意注意: 這里應用的是包名, 不是目錄名
fmt.Println(calculate.Mysqrt(5))
}
//這里import
的是目錄名, 不是包名字, 在golang
中, 包名可以和目錄名不一致的
//注意注意注意: 這里應用的是包名, 不是目錄名
這兩個主要是要注意的, 總的來說是 import 的是包的路徑, 引用包的東西是使用包名