Go语言学习-import的使用

基本介绍

案例

这里的import应该是跟js里面的导入有点类似,看个例子:

// 这种系统的函数,大部分我们只需要引入函数名即可,不过我们一般在使用的时候,编辑器会自动弹出
import "fmt"
// 这个是导入我们自己的包
import "first-go/4-import/lib2"

注意:我们新建的工程文件需要放在bin目录下面的 xxx/…/src的下面;

这个跟Go的 GOPATH有关,需要放到这个下面,然后引入包的全路径;

包对应的文件目录:

Go语言学习-import的使用_jar

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 ------
------ 我是有名字的方法 ------
------ 我是当前上下文环境使用的方法 ------