Golang命名规范新探讨
Golang命名规范新探讨 大家好,
我在思考 Go 语言的命名语法。众所周知,首字母的大小写决定了函数和变量的可见性。
由于 Go 语言没有严格的命名标准,我个人经常使用蛇形命名法,这纯属个人偏好。以前用 Java 编程时,我喜欢驼峰/帕斯卡命名法,但那时首字母大小写有严格的规定。如果在 Go 中使用驼峰命名法,我通常会为公开函数写 GetStuff(),而不是像在 Java 中那样写 getStuff()。个人而言,GetStuff() 看起来有点伤眼睛。
在 Python 中,我们可以轻松地实现一个公开函数 get_stuff() 或一个私有函数 _get_stuff(),虽然不算漂亮,但可以接受。
言归正传:在 Go 语言中,如果我选择使用蛇形命名法,那么私有函数看起来会像 get_stuff()。相应地,公开函数会被命名为 Get_stuff(),这看起来像一条大头的蛇。这让我想到:我们是不是应该称这种命名为“眼镜蛇命名法”?
我不知道这个话题有多大用处,但“眼镜蛇命名法”让我心情很好
。
祝大家一切顺利!
更多关于Golang命名规范新探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
据我所知,虽然没有官方的标准,但惯用的代码会使用驼峰命名法(例如,可以看看标准库)。
在你的代码中,你可以做任何你想做的事(没人会阻止你),但我倾向于避免使用那些偏离惯例的包,没有其他原因,只是因为作者很可能对标准库不熟悉,因此也可能不太精通 Go 语言。
更多关于Golang命名规范新探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
基于使用多种其他语言的经验,我确实觉得 Go 语言中“首字母大写表示公开”的约定有点过于讨巧了。对于我必须创建和使用的名称所带来的视觉印象,我也感到有些困扰。
Go 本可以有一个“public”和“private”限定符,这只会使(解析)名称声明的那一处变得复杂。它并不会使包的开发者工作复杂化,因为他们已经需要做出可见性决定了。
当使用导入的名称时,所有当前可见的名称都具有那个首字母大写字符,格式为 <package>.<大写首字母><名称其余部分>。这对所有使用者来说都只是冗余的工作。
为什么不扩展 Go 值得称赞的命名自由,允许公开名称也可以使用首字母小写呢?
在Go语言中,命名规范确实是一个值得探讨的话题。虽然Go官方没有像Java那样严格的命名标准,但社区已经形成了一些约定俗成的实践。
首先,关于可见性规则:在Go中,标识符的首字母大小写决定了其包外可见性。大写字母开头的标识符是公开的(exported),小写字母开头的标识符是私有的(unexported)。这是Go语言设计的一部分,无法更改。
关于命名风格,Go社区强烈推荐使用驼峰命名法(camelCase),而不是蛇形命名法(snake_case)。这是由Go官方代码库和标准库确立的惯例。例如:
// 公开函数使用帕斯卡命名法(首字母大写)
func GetStuff() {
// 实现
}
// 私有函数使用驼峰命名法(首字母小写)
func getStuff() {
// 实现
}
// 公开变量
var ImportantValue int
// 私有变量
var internalValue string
对于你提到的"眼镜蛇命名法"(Get_stuff()),这种混合风格在Go社区中是不被推荐的,因为它违反了Go的命名惯例。Go的命名应该保持一致性,要么全部使用驼峰命名法,遵循首字母大小写决定可见性的规则。
如果你真的非常喜欢蛇形命名法,可以考虑以下方式:
// 私有函数使用蛇形命名法
func get_stuff() {
// 实现
}
// 公开函数也使用蛇形命名法(但首字母大写)
func Get_stuff() {
// 实现 - 但这不符合Go惯例
}
但需要注意的是,这种风格可能会让其他Go开发者感到困惑,也不利于代码的一致性。大多数Go工具链(如gofmt、golint等)和IDE都是基于驼峰命名法的惯例来设计的。
在实际项目中,建议遵循Go社区的命名惯例,这样可以:
- 保持代码一致性
- 便于其他开发者理解
- 与Go工具链更好地集成
- 符合大多数Go项目的代码审查标准
虽然"眼镜蛇命名法"这个想法很有趣,但在实际开发中,还是建议遵循Go社区的命名惯例,使用驼峰命名法并利用首字母大小写来控制可见性。


