胶合首字母缩写词和golang命名约定

aba*_*abo 7 naming-conventions acronym go

有没有一种方法可以使下面的常量在不违反golang命名约定的情况下更具可读性?

const ( // stream types
    MPEGDASHStream  = iota
    HLSStream       = iota
    MPEGTSUDPStream = iota
    MPEGTSRTPStream = iota
)
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 9

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
    // ...
)
Run Code Online (Sandbox Code Playgroud)

此外,您不需要重复带有iota标识符的表达式。规范:常量声明:

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

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

// stream types
const (
    StreamMPEGDASH = iota
    StreamHLS
    StreamMPEGTSUDP
    StreamMPEGTSRTP
)
Run Code Online (Sandbox Code Playgroud)

另请参阅Go Code Review Comments以获取更多详细信息。首字母缩略词可以在Initialisms部分找到:

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

当“ID”是“identifier”的缩写时,此规则也适用于“ID”,因此请写“appID”而不是“appId”。

  • 是的,但是按顺序排列的首字母缩略词呢?它们使它们变得非常难以阅读。 (14认同)
  • MixedCaps 是可以的,但是关于大写首字母缩略词的规则可能会产生不可读的序列,而没有视觉分离。 (8认同)

Jea*_*tor 6

你所做的是规范的 Golang 方式。

根据Code Review Comments,您应该将首字母缩写词串在ALLCAPS

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

我喜欢吗?没那么多。

您可以稍微移动一下单词以使其更具可读性,例如 MPEGStreamDASH

如果你真的讨厌它——那么你需要意识到这是你的代码,你可以做任何你喜欢的事情——不管它MpegDashStreamMPEG_DASH_Stream甚至MpEg_DaSh_StreaM——但这将是邪恶的;-)