2017-11-11 118 views
3

我有一个名为“foo”的包,因为它定义了一个Foo结构和相关的东西,如方法。包装中结构的idomatic Go名称?

该软件包有一个返回堆分配的Foo结构的新方法。

包名称为“foo”时可以命名结构类型Foo吗?我不确定,因为它会结结巴巴。

var f foo.Foo

在另一方面,它感觉自然写

f := foo.New(...)

回答

5

这是确定的,而且它也是地道。

标准库中类似的例子:

此外,我猜foo.Foo只是一个例子,但是对于您的实际类型名称,您也可以在类型名称中使用简化,这完全是因为该包已经描述了它。例如,在标准库中有一个http.CookieJar接口,并且有一个net/http/cookiejar程序包,它提供了一个实现http.CookieJar的类型,它被命名为cookiejar.Jar,而不是cookiejar.CookieJar

所以,只需使用常识,从包装用户的角度来看(从他们的角度来看)。 foo.Foo非常好。但上面的类似示例是包含许多其他类型的包的一部分。如果这是您的软件包唯一可以导出的类型,则根据使用情况,foo.F也可能是明智的和可接受的。举例来说,有bson.Mbson.D类型故意缩短,因为它们经常用于甚至多次用于创建MongoDB查询。鉴于上下文,清楚它们是什么,并且不会造成麻烦或误解。