包的理解
Golang中有package的概念。在go源码文件的第一行就是先声明包名:
这里的包名相当于一个标签,不是字符串。和所在文件夹没有关系,比如:上述源码在GOPATH/golang-learning/chapter06/文件夹下,它的包名就是xxx
导入包
用improt关键字导入包,包的导入路径是基于工作目录的。因此Go会在工作目录src子目录下查找包
导入标准包使用的是给定的短路径,如“fmt”、“net/http”
$GOPATH/src/learning/chapter01/hello.go
1234567package helloimport "fmt"func SayHello() {fmt.Println("Hello,World!");}项目的包,需要在工作目录下指定一个目录
$GOPATH/src/learning/cmd/main.go
1234567package mainimport "learning/chapter01"func main() {hello.SayHello()}注意:同一个路径下不支持定义多个包,会报编译错误
导入包的方式
导入使用包有四种方式,不同方式用途不一样
import “learning/chapter01”
常规方式,通过包名hello调用SayHello方法。hello.SayHello()import h “learning/chapter01”
这里的 h 是包名 hello 的别名,h.SyayHello() 。该方式合适的场景包名过于复杂或者意思不明确
我写的代码其实就很不明确,所以最好要起别名来明确含义1import hello "learning/chapter01"包名和其他包冲突
随着项目代码的不断增加或引入第三方包,很大概率大家会用相同的包名,就需要用别名来区别1234import ("errors"bizError "learning/chapter11")
import . “learning/chapter01”
这里的点”.”符号表示,对包 hello 的调用直接省略包名,你我以后就是一家人,不分彼此,你的东西就像我就的一样,随便用。1234567package mainimport . "learning/chapter01"func main() {SayHello()}improt _ “learning/chapter01”
当导入一个包时,该包下的文件里所有init()函数都会被执行,我们就需要用“_”符合来导入包123456package mainimport _ "learning/chapter01"func main() {}