包含连字符的程序包名称



当我的包中有连字符时,我很难理解为什么我的代码会抱怨。例如,如果我有一个包名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模块参考中。我想我可以在组织目录结构时自由使用连字符。

相关内容

  • 没有找到相关文章

最新更新