Go语言学习-import的使用
基本介绍
案例
这里的import应该是跟js里面的导入有点类似,看个例子:
// 这种系统的函数,大部分我们只需要引入函数名即可,不过我们一般在使用的时候,编辑器会自动弹出
import "fmt"
// 这个是导入我们自己的包
import "first-go/4-import/lib2"
注意:我们新建的工程文件需要放在bin目录下面的 xxx/…/src的下面;
这个跟Go的 GOPATH有关,需要放到这个下面,然后引入包的全路径;
包对应的文件目录:
import和init方法
我们可以看看以下代码:lib1目录下
package lib1
import "fmt"
func JarTest1() {
fmt.Println("------ 我是 jar-1 ------")
}
// init() 方法会优先执行
func init() {
fmt.Println("------ 我是 jar-1 的 init() 方法 ------")
}
lib2目录下
package lib2
import "fmt"
func JarTest2() {
fmt.Println("------ 我是 jar-2 ------")
}
func init() {
fmt.Println("------ 我是 jar-2 的 init() 方法 ------")
}
然后再import.go中导入:
// 工程 first-go 需要放在bin目录下面的 xxx/.../src的下面
import (
"first-go/4-import/lib1"
// 这里的包如果导入了,但是不使用是会报错的
"first-go/4-import/lib2"
"fmt"
)
func main() {
lib2.JarTest2()
lib1.JarTest1()
}
/**
1. init(),方法是在其他方法之前执行的
2. 根据导入包的顺序执行,这里 lib1、lib2,两者按导入包的顺序执行init(),然后在执行main的init方法
*/
func init() {
fmt.Println("------ 我是 main 的 init() 方法 ------")
}
这里有两点需要注意:
- init(),方法是在其他方法之前执行的
- 根据导入包的顺序执行,这里 lib1、lib2,两者按导入包的顺序执行init(),然后在执行main的init方法
其他声明方式
1. 匿名
// 这个是匿名包的使用,一般用于 调用该 类里面的 init() 方法
_ "first-go/4-import/anonymous"
这里虽然用不了该包下面的方法,但是其中的 init方法依旧会执行,一般再编译器里,你没有使用到的包,编辑器会提示你的,有时候会自动帮你删除,需要自己去设置以下;
2. 带名字的方式
// 这是为导进来的包加上名字
haveName "first-go/4-import/unanonymous"
这里使用方式:
// 这是为导进来的包加上名字
haveName.UnAnonymousTest()
3. 上下文环境
// 引入 context的上下文环境, 不需要在调用方法前面加任何调用者
. "first-go/4-import/context"
这里也可以叫导入当前目录下的所有函数,一般可以叫上下文;
使用方式:
// 直接调用即可
Context()
全部代码
根据目录顺序,所有代码展示:
anonymous.go
package anonymous
import "fmt"
func AnonymousTest() {
fmt.Println("------ 我是匿名方法 ------")
}
func init() {
fmt.Println("------ 我是匿名 init() 方法 ------")
}
context.go
package context
import "fmt"
func Context() {
fmt.Println("------ 我是当前上下文环境使用的方法 ------")
}
jar1.go
package lib1
import "fmt"
func JarTest1() {
fmt.Println("------ 我是 jar-1 ------")
}
// init() 方法会优先执行
func init() {
fmt.Println("------ 我是 jar-1 的 init() 方法 ------")
}
jar2.go
package lib2
import "fmt"
func JarTest2() {
fmt.Println("------ 我是 jar-2 ------")
}
func init() {
fmt.Println("------ 我是 jar-2 的 init() 方法 ------")
}
unanonymous.go
package unanonymous
import "fmt"
func UnAnonymousTest() {
fmt.Println("------ 我是有名字的方法 ------")
}
func init() {
fmt.Println("------ 我是有名字的 init() 方法 ------")
}
main函数文件:import.go
package main
// 工程 first-go 需要放在bin目录下面的 xxx/.../src的下面
import (
// 这个是匿名包的使用,一般用于 调用该 类里面的 init() 方法
_ "first-go/4-import/anonymous"
"first-go/4-import/lib1"
// 这是为导进来的包加上名字
haveName "first-go/4-import/unanonymous"
// 这里的包如果导入了,但是不使用是会报错的
"first-go/4-import/lib2"
// 引入 context的上下文环境, 不需要在调用方法前面加任何调用者
. "first-go/4-import/context"
"fmt"
)
func main() {
lib2.JarTest2()
lib1.JarTest1()
// 这里有个注意的点,方法名必须是 大写字母开头,才能使用,类似于 java 的 public
// anonymous.anonymousTest()
// 这是为导进来的包加上名字
haveName.UnAnonymousTest()
Context()
}
/**
1. init(),方法是在其他方法之前执行的
2. 根据导入包的顺序执行,这里 lib1、lib2,两者按导入包的顺序执行init(),然后在执行main的init方法
*/
func init() {
fmt.Println("------ 我是 main 的 init() 方法 ------")
}
输出结果:
------ 我是匿名 init() 方法 ------
------ 我是 jar-1 的 init() 方法 ------
------ 我是有名字的 init() 方法 ------
------ 我是 jar-2 的 init() 方法 ------
------ 我是 main 的 init() 方法 ------
------ 我是 jar-2 ------
------ 我是 jar-1 ------
------ 我是有名字的方法 ------
------ 我是当前上下文环境使用的方法 ------