说明:《Go语言精进之路》第一部分-熟知Go语言的一切,不在博客中做读书笔记了,大家可以自己读一读,每个人心里都会有自己对Go语言的认识和理解。
直接从第二部分-项目接口、代码风格与标识符命名开始
第二章目录如下
- 第5条 使用公认且广泛使用的项目结构
- 第6条 提交前使用gofmt格式化代码
- 第7条 使用Go命名惯例对标识符进行命名
第5条重点
第5条重点描述了Go项目的结构,分别是二进制可执行文件的Go项目结构和只构建库的Go项目结构。
(1)二进制可执行文件的Go项目
LICENSE/README.md 都是常见的文件
Makefile是构建脚本
cmd目录:可执行文件对应的main包的源文件,有几个main包就对应几个可执行文件,cmd目录也可以改为app目录
go.mod/go.sum:Go语言依赖管理的配置文件,类似java中的maven或者gradle
pkg目录:项目自身依赖的一些库和包文件,pkg目录也可以改为lib目录
vendor目录:可选,早期Go中使用的依赖管理,目前构建使用go module
(2)只构建库的Go项目结构
更加简单,只有lib目录了
(3)internal目录
对于不想要暴露外部引用的包都可以新建internal目录后,放在internal目录下
第6条重点
学会使用gofmt格式化代码,使用下面命令查看gofmt命令的使用
第7条重点
包名采用小写的单个单词命名,比如zip,list等
包名可以不唯一,但是导入包的路径是唯一的,类似java中类名可以一样,全路径类型不一样就行
下图中展示了在golang中如果包名相同时,该如何使用,下图存在2个相同的包log,它们分别位于
/lib/fastlog/log和lib/slowlog/log。在main包中,如果要同时使用这2个包的话,我们需要像如下方式使用,使用slowlog显式包名指代slowlog下的log包
package mainimport ("go-learn/lib/fastlog/log"slowlog "go-learn/lib/slowlog/log"
)func main() {println(log.LogLevel)println(slowlog.LogLevel)
}
变量名命名简短,这和java区别很大,在java中变量名一般很长,比如userList,但是在Go中,建议使用users表示,不建议带上类型名称。