当我的包中有连字符时,我很难理解为什么我的代码会抱怨。例如,如果我有一个包名foo-bar,并且我声明该包名
package foo-bar
foo-bar/config.go:1:13: expected ';', found '-'
那么Go编译器为什么会抱怨呢?这是否意味着我们不应该在go包名称中使用连字符?
既然有很多repo在包名称中使用连字符,我是不是做错了什么?
我们可以从Go规范中看到,包名称必须是有效的标识符:
PackageName=标识符。
我们可以进一步了解到,有效标识符定义为:
标识符=字母{letter|unicode_digt}。
因此包名称只能包含字母和数字。不允许使用-
字符。
我们可以进一步理解,作为一种特殊情况,下划线字符(_
(被定义为一个字母,用于Go标识符:
下划线字符_(U+005F(被认为是一个字母。
因此,如果您愿意,可以将-
替换为_
作为程序包名称。
但是,请考虑而不是这样做,因为这被认为是不地道的。有关Go中包命名的建议,请阅读"有效Go"中关于包名称的部分,或阅读Go博客中关于包名的帖子。
来自Go Package Name博客文章:
另一种语言的典型名称风格在Go程序中可能不地道。以下是两个名字的例子,这些名字在其他语言中可能很有风格,但在Go中不太合适:
- computeServiceClient
- 优先级队列
如果您的包地址名称中有-
,您可以用下划线设置包名称。
示例:
包文件地址:some/where/foo-bar/config.go
package foo_bar
// your codes
虽然没有直接关系,但由于某种原因,在创建项目布局时,我一直试图搜索是否有关于";路径";go模块的一部分。我发现除了";对模块路径"中允许的字符也有几个词法限制;在Go模块参考中。我想我可以在组织目录结构时自由使用连字符。