博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于golang中包(package)的二三事儿
阅读量:6963 次
发布时间:2019-06-27

本文共 711 字,大约阅读时间需要 2 分钟。

golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应。

golang的package的特点:

1、go的package不局限于一个文件,可以由多个文件组成。

  组成一个package的多个文件,编译后实际上和一个文件类似,组成包的不同文件相互之间可以直接引用变量和函数,不论是否导出;

  因此,组成包的多个文件中不能有相同的全局变量和函数(这里有一个例外就是包的初始化函数:init函数,下面还有讨论)

2、go不要求package的名称和所在目录名相同,但是你最好保持相同,否则容易引起歧义。因为引入包的时候,go会使用子目录名作为包的路径,而你在代码中真正使用时,却要使用你package的名称。

3、每个子目录中只能存在一个package,否则编译时会报错。

4、go的package是以绝对路径GOPATH来寻址的,不要用相对路径来import

关于package的初始化函数init的说明:(主要参考大侠在某贴中的回复,我经过试验确实如此)

每个package中应该是每个init都会被调用,且顺序固定

1、对同一个go文件的init()调用顺序是从上到下的
2、对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数,对于
3、对不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
4、如果package存在依赖,则先调用最早被依赖的package中的init()

 

转载于:https://www.cnblogs.com/dajianshi/p/3596492.html

你可能感兴趣的文章
用maven时出现,报错 miss 一些包,但是发现项目里已经引入了,但还是报错
查看>>
JQ中 $(document).scrollTop()、$('html').scrollTop()、 $(window).scrollTop()区别
查看>>
令人眼前一亮的下拉式终端 Tilda & Guake
查看>>
Python - 元组(tuple) 详解 及 代码
查看>>
AsynchronousSocketChannel
查看>>
IE6尾部重复字符bug , IE6下产生多余字符的BUG
查看>>
我的友情链接
查看>>
Asp.net core 二级域名的设置
查看>>
【LAMP】03、构建分离式的LAMP
查看>>
大快DKhadoop大数据处理平台详解
查看>>
摄影菜鸟使用的相机镜头术语大全分享
查看>>
XenServer部署系列之06——网络配置
查看>>
Python黑科技:50行代码运用Python+OpenCV实现人脸追踪+详细教程+快速入门+图像识...
查看>>
软件测试质量和效率评价之我见
查看>>
kloxo增加了域名,怎么不能访问?如何重启web服务?
查看>>
Nginx调试入门
查看>>
Centos7安装jdk
查看>>
MySQL锁
查看>>
国学题库整理
查看>>
jquery chosen 插件 动态设置+更新选项值
查看>>