第三章重点:
第三章主要讲的是代码的管理,在第一章里面有的东西已经写进去了,这里按照老师的课程总结一下:
1. 同一目录下面源码应该声明属于同一个代码包,而且同一个包下面的源文件之间的函数调用是可以屏蔽大小写(私有和共有接口)。
2.源码文件声明的包的名字可以和目录不一致,但编译生成的文件的名字和父目录是一致的。
3.如果声明的包的名字和目录的名字不一致,那么怎么引用这个包里面的接口??第一章里面写过了,go是按照文件地址寻址的。所以规则如下:
import 文件夹的路径
包名.接口名字()
我们导入的时候肯定是文件的路径,但调用的时候要用在源码文件里面声明的package的名字。
4.程序实体的访问规则,通过大小写来决定接口的访问规则,首字母大写代表的是公开的,小写代表的是只有同一个包下面可以引用。
internal包
这个东西还是第一次见,按照老师说的:
internal 仅能被直接父级和子包引用。这个意思是什么那??
假设我们工程的目录结构如下:
q4
- lib
- internal
-test
-test2
-demo9.go
-demo8.go
internal.go
- demo7.go
- demo6.go
q4目录下面有lib子目录和demo6.go,lib下面有Internal目录和demo7.go,internal目录下面有internal,go和test目录,test目录下面有test2目录,test2下面有demo9.go,这样除了demo6不能引用internal.go,其它的都属于inter的父目录和子目录下面的,所以可以引用。
思考题
1. 如果你需要导入两个代码包,而这两个代码包的导入路径的最后一级是相同的,比如:dep/lib/flag和flag,那么会产生冲突吗?
分两种情况:
1.如果目录名字相同 && 源文件里面声明的package名字一样,那么肯定是冲突的。
2.如果目录名字相同但源文件里面声明的package名字不同,那么就不存在冲突
2. 如果会产生冲突,那么怎么解决这种冲突,有几种方式?
我能想到的就是给每个包起个别名。
网友评论