版权声明:本文为博主原创文章,博客地址:
https://blog.youkuaiyun.com/zxy_666/article/details/80390843,未经博主允许不得转载。
前言
初学go时,总是在不经意间邂逅各种坑。那些坑说大不大,但总能耗费你不少精力陪它。今天,给大家分享:那些年我们追过的go坑。
包package
package是go管理代码的重要工具。
下面主要针对在GoLand(go的一款开发工具)实践中的说明
package基本使用
项目中的每个文件夹都是一个package。package下可以嵌套package。但每个.go文件的package以其所在的当前文件夹为准。
在GoLand中新建文件夹时,在该层目录下新建的.go文件,其package默认为当前文件夹名(大小写一致)。当.go文件创建后,再去修改文件夹名时,需要注意其下的.go文件中的package是否自动修改。
==同一层目录下的.go文件,package必须一致==,否则编译出错。
同层目录不包括嵌套目录
如下所示:
a1.go和a2.go属于dir A这一级目录下,其package必须一致。
b1.go和b2.go属于dir B这一级目录。
projectName
src
dir A
dir B
b1.go
b2.go
a1.go
a2.go
例如,文件夹world下的所有.go文件,package必须一致,package可以随便起,不一定与文件夹名一样。
包(package)可见性
在了解可见性之前,我们先了解一个概念:可导出的。
在go语言中,变量或函数名的首字母大写时,其就是可导出的,小写时则是不可导出的。
- 函数和变量的可访问性是以包做隔离的。
包 函数或变量 可访问性
同一个包 可/不可导出的 都能访问
其他的包 可导出的 可访问
其他的包 不可导出的 不能访问
同一个包内,均可访问导出/不可导出的变量或函数。无论变量是全局变量还是struct的成员变量,无论函数是全局函数还是隶属于某个struct的成员函数。
这里的“全局”指的是不通过“对象.变量或函数”,而是直接通过package.变量或函数即可访问的变量或函数。
· 全局变量在同一个包内,直接访问,包外通过package.变量访问,函数亦然。当然struct对象也是一种特殊的全局数据结构,遵循这个规则。
· 对象成员变量或函数,必须通过“对象实例.变量或函数”访问。
例如:
//项目结构
project
src
dir A
a1.go