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