Go语言基础语法(import)

章节

  • import 导包基础语法简介
  • import 导包原理
  • import 导包实践

1.import 基础语法简介

1.1 import语句可以导入源代码文件所依赖的package 包

1.1.1 import fmt

1
2
3
4
5
6
7
package main
import "fmt"
func main() {
fmt.Println("测试")
}

1.2 不得导入源代码文件中没有用到的package,否则Go语言编译器会报编译错误

1.2.1 引入源代码程序中用不到的time包 (2018版的 goland 可以自动去除没有使用的package)

1.3 import 语法格式分为两种

1.3.1 语法格式1

1
2
3
import "package1"
import "package2"
import "package3"

1.3.2 语法格式2

1
2
3
4
5
import (
"package1"
"package2"
"package3"
)

2 import原理

  • 如果一个package main 中导入其他的包,包将被顺序导入;
  • 如果导入的包中依赖其他包(包B),会首先导入B包,然后初始化B包中常量和变量,最后如果B包中有init()方法,会自动执行init();
  • 所有包导入完成后才会对main中的常量变量进行初始化,谈后执行main中的init函数(如果存在),最后执行main函数;
  • 如果一个包被导入多次则该包只会被导入一次;

先初始化依赖包,包中内容的初始化为 常量&变量->init()函数->main(主程文件)中的main()函数

import导入依赖包原理图如下所示:
依赖包导入原理图

3.import 导包实践

3.1 创建learn01 、show02两个包
创建learn01 、show02两个包

代码如下所示:
learn/lean01.go

1
2
3
4
5
6
7
8
9
10
11
12
13
package learn01
import "fmt"
//初始化函数
func init() {
fmt.Println("learn_1 init")
}
//a函数 什么都不做
func Learn1() {
}

show02/show.go

1
2
3
4
5
6
7
8
9
10
11
12
13
package show02
import "fmt"
//初始化函数
func init() {
fmt.Println("show_2 init")
}
//函数名大写
func Show2() {
}

main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
//问题1:没有自动 import 相关的包
import (
"fmt"
"learn01"
"show02"
)
/**
问题:如果在main中不调用其他包的函数,其他包的init函数会执行吗?
*/
func main() {
fmt.Println("main println")
learn01.Learn1()//注意此为空方法体
show02.Show2()
}

问题列表:

  • 最新版goland 2018.02版本对于源代码的放置路径有严格要求,必须放置在项目的 src 目录下?
  • import 自动导包功能缺失?

运行结果如下所示:
main.go 运行结果

注意:不同包的init()函数执行先后顺序跟导包顺序相关。

鱼大坤 wechat
个人微信号,欢迎添加~
如果我的文章对您有帮助,请小小的打赏一下吧~,我将>创作更好的文章给大家!谢谢!