您现在的位置是:首页 > 文章详情

Go语言基础语法(import)-5

日期:2018-10-10点击:377

章节

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

1.import 基础语法简介

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

1.1.1 import fmt

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

import "package1" import "package2" import "package3"

1.3.2 语法格式2

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

package learn01 import "fmt" //初始化函数 func init() { fmt.Println("learn_1 init") } //a函数 什么都不做 func Learn1() { } 

show02/show.go

package show02 import "fmt" //初始化函数 func init() { fmt.Println("show_2 init") } //函数名大写 func Show2() { } 

main.go

package main //问题1:没有自动 import 相关的包 import ( "fmt" "learn01" "show02" ) /** 注意:无论fmt println 函数放在learn01.Learn1() show02.Show2()之前还是之后都是最后打印的, 这其实是import原理导致的 */ func main() { fmt.Println("main println") learn01.Learn1()//注意此为空方法体 show02.Show2() } 

问题列表:

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

以上两个问题在网上暂时没有找到解决方案,估计是个人 ide 设置出现问题-待解决

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

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

原文链接:https://yq.aliyun.com/articles/650952
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章