Go:切片变量/参数的命名约定?

时间:2012-02-11 03:35:19

标签: go

是否在Go中命名切片的约定?具体来说,你使用复数? 我注意到Go App Engine没有(例如它使用key而不是keys):

func GetMulti(c appengine.Context, key []*Key, dst interface{}) error

我没有看到我读过的标准软件包或文档中的任何内容。单数或复数是正常的吗?

2 个答案:

答案 0 :(得分:2)

我想这应该是一个错字。

切片和数组的名称是复数。在标准库中找到一些样本并不困难:CookieJar中的SetCookiesReaddirnamesArgs中的argv变量中的函数{{1}}。

但是对于任何变量都使用一个更好地解释其目的的名称。

这种全复数方法的明显例外是{{1}},其名称已有数十年之久。

答案 1 :(得分:0)

@Mostafa是正确的。 Go中的切片和数组的名称应为复数形式。在此示例中,fns是{Ainar-G中fn的复数。参见https://stackoverflow.com/a/35648660/12817546.

package main

import "fmt"

func main() {
    var fns []func()
    fns = append(fns, beeper)
    fns = append(fns, pinger)
    for _, fn := range fns {
        fn() //beep-beep ping-ping
    }

}
func beeper() { fmt.Println("beep-beep") }
func pinger() { fmt.Println("ping-ping") }

@Mostafa也是正确的,名称应说明其用途。此外,不言而喻的名称使代码更具可读性。不言而喻的名字会注释并记录其代码。

不言而喻的名称是一致的。那就是他们容易猜到的地方。beeper与“哔哔”匹配。不言而喻的名字是准确的。那就是它们很容易理解。fnsfn匹配,表示func

不言而喻的名字很短。那就是他们很容易键入。短名称要求声明和使用之间的距离很短。诸如fn之类的参数可以为一或两个字符长。对于其他所有内容,可以使用一个简短的名词。但是有时如果距离很大,则需要更多的解释。可以使用多词名称mixedCaps。但是请不要使用under_score_name

使用的名称可能不尽如人意。结果,代码可能包含过多的//行注释。注释会使代码的可读性降低。重命名您的标识符,使它们变得更加不言而喻。然后可以减少//的数量,而不会引起解释。

名称的使用还有其他限制。不能使用Go关键字。规范的ReadWriteCloseFlushString等单词不应该使用。名称的第一个字符必须是Unicode字母或_。请记住,可以导出大写的名称,例如MixedCaps,而type标识符通常是大写。

要了解更多信息,请查看https://talks.golang.org/2014/names.slidehttps://blog.golang.org/package-nameshttps://talks.golang.org/2013/bestpractices.slidehttps://golang.org/ref/spec#Identifiershttps://golang.org/doc/effective_go.html#names