14

有没有办法在不破坏 golang 命名约定的情况下使下面的常量更具可读性?

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

2 回答 2

10

Go 的命名约定更喜欢 MixedCaps 而不是下划线,所以不要使用它们。资料来源:有效围棋: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了解更多详细信息。首字母缩略词可以在Initialisms部分找到:

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

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

于 2016-10-03T11:13:56.603 回答
7

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

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

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

我喜欢吗?没那么多。

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

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

于 2020-08-11T09:53:59.290 回答