golang包引用解析
环境变量配置如下:
- GOROOT----[
C:Go
] - GOPATH----[
F:workspacego_home
]
vs code配置如下:
F:workspacego_home
是总的golang
工作空间, 在下面建立两个必须的目录 src
(必须[F:workspacego_homesrc
]), pkg
(必须[F:workspacego_homepkg
]), bin
(非必须. go intanll
时自动创建).
以后每一个单独的项目都是在 F:workspacego_home
单独创建一个目录. 比如下面:
F:workspacego_homesrc est1
F:workspacego_homesrc est2
test1
和 test2
这是两个不同的项目. golang
主要是通过这样的目录结构, 来管理包的关系. 使用包(package
)这种语法元素来组织源码,所有语法可见性均定义在package
这个级别
其中重要的是, 要理解应用包的定义. 应用包就是一个个独立的包体, 一个包一般是某个功能的源码文件组成的目录(可以有多层的子目录属于这个包). 其他在最顶层的包目录, 一般还会有个test
文件,用于单元测试.
那么程序怎么运行呢?
在项目顶层创建一个main.go
(程序运行入口), 包名注意一定是 package main
.
看例子, 以下是整个demo的文件结构:
F:workspacego_homesrc estcalculatecalculate.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:workspacego_homesrc esthellohello.go
//hello.go
package hello
import "fmt"
func Hello() {
fmt.Println("hello")
}
F:workspacego_homesrc estmain.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 的是包的路径, 引用包的东西是使用包名