包装中结构的idomatic Go名称?
问题描述:
我有一个名为“foo”的包,因为它定义了一个Foo结构和相关的东西,如方法。包装中结构的idomatic Go名称?
该软件包有一个返回堆分配的Foo结构的新方法。
包名称为“foo”时可以命名结构类型Foo吗?我不确定,因为它会结结巴巴。
var f foo.Foo
在另一方面,它感觉自然写
f := foo.New(...)
答
这是确定的,而且它也是地道。
标准库中类似的例子:
此外,我猜foo.Foo
只是一个例子,但是对于您的实际类型名称,您也可以在类型名称中使用简化,这完全是因为该包已经描述了它。例如,在标准库中有一个http.CookieJar
接口,并且有一个net/http/cookiejar
程序包,它提供了一个实现http.CookieJar
的类型,它被命名为cookiejar.Jar
,而不是cookiejar.CookieJar
。
所以,只需使用常识,从包装用户的角度来看(从他们的角度来看)。 foo.Foo
非常好。但上面的类似示例是包含许多其他类型的包的一部分。如果这是您的软件包唯一可以导出的类型,则根据使用情况,foo.F
也可能是明智的和可接受的。举例来说,有bson.M
和bson.D
类型故意缩短,因为它们经常用于甚至多次用于创建MongoDB查询。鉴于上下文,清楚它们是什么,并且不会造成麻烦或误解。