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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孙正经胡说

创作不易,感谢您的关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值