粘合缩写词和golang命名规范

20

有没有一种方法可以使下面的常量更易读,而不违反golang的命名惯例?

const ( // stream types
    MPEGDASHStream  = iota
    HLSStream       = iota
    MPEGTSUDPStream = iota
    MPEGTSRTPStream = iota
)

为什么不使用下划线呢? MPEG_DASH_STREAM - Jerry Saravia
1
那很合乎逻辑,但我怀疑它是否被推荐。 - ababo
1
我认为没有办法在不破坏代码风格的情况下使它们更易读。我建议坚持你已经有的,也许采纳icza的建议,在常量前加上“Stream”。 - Ainar-G
我的建议是:可读性比对特定代码风格的教条式遵循更为重要。在这种情况下,像 MpegDASHStreamMPEGDashStream 这样的名称似乎是一个可以接受的妥协方案。 - Joel Cornett
3个回答

18
Go的命名规范偏向使用MixedCaps而不是下划线,所以请不要使用下划线。来源:Effective Go: MixedCaps 通常,当您对实体的不同值有常量时,更易读的方法是以该实体开头的常量名称,然后是具体值的名称。一个很好的例子是net/http包:
const (
    MethodGet  = "GET"
    MethodHead = "HEAD"
    MethodPost = "POST"
    // ...
)

const (
    StatusContinue           = 100 // RFC 7231, 6.2.1
    StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
    StatusProcessing         = 102 // RFC 2518, 10.1

    StatusOK                 = 200 // RFC 7231, 6.3.1
    StatusCreated            = 201 // RFC 7231, 6.3.2
    // ...
)

同样,您不需要使用 iota 标识符重复表达式。 规范:常量声明:

在括号内的 const 声明列表中,除了第一个声明外,可以省略表达式列表。这样的空列表等效于文本替换为前面第一个非空表达式列表及其类型(如果有)。省略表达式列表因此等价于重复上一个列表。

因此,在您的情况下,它可以简单地看起来像这样,非常清晰易读:

// stream types
const (
    StreamMPEGDASH = iota
    StreamHLS
    StreamMPEGTSUDP
    StreamMPEGTSRTP
)

更多细节请参见Go Code Review Comments,其中包括缩写在首字母缩略语部分:

名字中的首字母缩略语和缩写(例如“URL”或“NATO”)应具有一致的大小写。例如,“URL”应该显示为“URL”或“url”(例如“urlPony”或“URLPony”),而不是“Url”。例如: ServeHTTP而不是ServeHttp。

当“ID”短语表示“标识符”时,此规则也适用,因此请编写“appID”而不是“appId”。


17
是的,但是顺序缩写词怎么办?它们会使得它们非常难以阅读。 - ababo
我更喜欢这个!《Effective Go》网页也说了这个: - Jerry Saravia
MixedCaps最后,Go语言的约定是使用MixedCaps或mixedCaps而不是下划线来编写多个单词的名称。 - Jerry Saravia
11
混合大小写可以接受,但是关于缩略词大写的规则可能会在没有视觉分隔的情况下产生难以阅读的序列。 - ababo

13

您所做的是符合 Golang 规范的。

根据 代码审查意见,您应该将缩略词用大写字母拼接起来:

名称中的首字母缩略词或首字母缩写(例如“URL”或“NATO”)应具有一致的大小写。例如,“URL”应显示为“URL”或“url”(如“urlPony”或“URLPony”),而不是“Url”。例如:ServeHTTP 而非 ServeHttp。对于具有多个初始化“单词”的标识符,请使用“xmlHTTPRequest”或“XMLHTTPRequest”等。

我喜欢吗?并不是特别喜欢。

您可以稍微调整单词的顺序以使其更易读,例如 MPEGStreamDASH

如果您真的很讨厌它-那么您需要认识到这是您的代码,您可以做任何您想做的事情-例如 MpegDashStreamMPEG_DASH_Stream 或甚至 MpEg_DaSh_StreaM - 但那样是不好的;-)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接