包中结构的惯用 Go 名称?

idiomatic Go name for struct in package?

我有一个名为 "foo" 的包,因为它定义了一个 Foo 结构和相关的东西,比如方法。

该包有一个新方法,returns 堆分配了 Foo 结构。

当包名为 "foo" 时,可以将结构类型命名为 Foo 吗?我不确定,因为它会口吃。

var f foo.Foo

另一方面写起来感觉很自然

f := foo.New(...)

还可以,也很地道。

标准库中的类似示例:

此外,我想 foo.Foo 只是一个示例,但是对于您的实际类型名称,您也可以在类型名称中使用简化,正是因为包已经描述了它。例如,有一个 http.CookieJar interface in the standard lib, and there is a net/http/cookiejar package which provides a type that implements http.CookieJar, and it is named cookiejar.Jar,而不是 cookiejar.CookieJar

所以只要用常识,从包的用户的角度(从他们的角度来看)来看待它。 foo.Foo 完全没问题。但是上面的类似示例是包含许多其他类型的包的一部分。如果这是您的包将导出的唯一类型,根据用途,foo.F 也可能是明智和可接受的。例如,有 bson.M and bson.D 类型故意缩短,因为它们经常甚至多次使用来创建 MongoDB 查询。鉴于上下文很清楚它们是什么,不会引起麻烦或误解。