是否在Go中命名切片的约定?具体来说,你使用复数?
我注意到Go App Engine没有(例如它使用key
而不是keys
):
func GetMulti(c appengine.Context, key []*Key, dst interface{}) error
我没有看到我读过的标准软件包或文档中的任何内容。单数或复数是正常的吗?
答案 0 :(得分:2)
我想这应该是一个错字。
切片和数组的名称是复数。在标准库中找到一些样本并不困难:CookieJar
中的SetCookies
,Readdirnames
或Args
中的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
与“哔哔”匹配。不言而喻的名字是准确的。那就是它们很容易理解。fns
与fn
匹配,表示func
。
不言而喻的名字很短。那就是他们很容易键入。短名称要求声明和使用之间的距离很短。诸如fn
之类的参数可以为一或两个字符长。对于其他所有内容,可以使用一个简短的名词。但是有时如果距离很大,则需要更多的解释。可以使用多词名称mixedCaps
。但是请不要使用under_score_name
。
使用的名称可能不尽如人意。结果,代码可能包含过多的//
行注释。注释会使代码的可读性降低。重命名您的标识符,使它们变得更加不言而喻。然后可以减少//
的数量,而不会引起解释。
名称的使用还有其他限制。不能使用Go关键字。规范的Read
,Write
,Close
,Flush
,String
等单词不应该使用。名称的第一个字符必须是Unicode字母或_
。请记住,可以导出大写的名称,例如MixedCaps
,而type
标识符通常是大写。
要了解更多信息,请查看https://talks.golang.org/2014/names.slide,https://blog.golang.org/package-names,https://talks.golang.org/2013/bestpractices.slide,https://golang.org/ref/spec#Identifiers和https://golang.org/doc/effective_go.html#names。