4.2 Go语言中包(Packages)的命名
Posted 孙琦Ray
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.2 Go语言中包(Packages)的命名相关的知识,希望对你有一定的参考价值。
基本规则
- Go标准库使用了Unix名称命名函数
- 其他函数使用驼峰命名CamelCase,例如:ReadFile, NewWriter,
- 使用import导入包后,跟随点(.)访问函数,例如:bytes.Buffer
- Go中包名通常使用小写字母,并且是单独的单词
- 导入包并重命名,类似Python中的as,下面例子中将bytes包命名为bar,所以可以使用bar.Buffer,注意这里顺序与Python相反,先写alias名称,再写实际包的名称,实际包使用双引号
- 要善于利用包结构来表达意思,例如:缓存处理包bufio中读取的类型是Reader而不是BufReader,因为在使用中视为整体bufio.Reader,这样简单明了而且达义
- 长名称不一定让内容更容易理解,短小精悍的例子once.Do(sync包),once.Do(setup)读起来比once.DoOrWaitUntilDone(setup)更易懂
import bar "bytes"
bar.Buffer
包名与目录的关系
包名本质上是所在目录的名称,我们在基础知识演示用例中进行扩展,进一步理解包名,执行前需要执行的命令请参考上一节,首先来看一下目录结构:
├── main.go
├── src
│ ├── myfunc
│ │ └── myfunc.go
│ └── subpackage
│ └── sub
│ └── subfunc.go
└── test_package
此时,如果我们想使用subpackage/sub/subfunc.go时,需要import的是subpackage/sub,而不是subpackage/sub/subfunc,来看具体的实现:
package subfunc
import "fmt"
func MySubFunc()
fmt.Println("This is a sub package func")
我们回到使用的主函数中,我们在主函数中引入"subpackage/sub",而调用中直接使用了文件名称myfunc
package main
import "myfunc"
import "subpackage/sub"
func main()
myfunc.MyPublicFunc()
// NOTE(Ray): Can not call private function
//myfunc.myPrivateFunc()
subfunc.MySubFunc()
执行的结果如下
Use my public function.
This is a sub package func
以上是关于4.2 Go语言中包(Packages)的命名的主要内容,如果未能解决你的问题,请参考以下文章