包中结构的惯用Go名称?

包中结构的惯用Go名称?,go,idioms,Go,Idioms,我有一个名为“foo”的包,因为它定义了一个foo结构和相关的东西,比如方法 该包有一个新方法,返回堆分配的Foo结构 当包名为“Foo”时,可以将结构类型命名为Foo吗?我不确定,因为它会结巴 var f foo.foo 另一方面,写作感觉很自然 f:=foo.New(…)它很好,而且也是惯用的 标准库中的类似示例: , 另外,我猜foo.foo只是一个例子,但是对于实际的类型名,您也可以在类型名中使用简化,因为包已经描述了它。例如,标准库中有一个接口,有一个包提供了一个实现ht

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

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

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

var f foo.foo

另一方面,写作感觉很自然


f:=foo.New(…)
它很好,而且也是惯用的

标准库中的类似示例:

  • ,
另外,我猜
foo.foo
只是一个例子,但是对于实际的类型名,您也可以在类型名中使用简化,因为包已经描述了它。例如,标准库中有一个接口,有一个包提供了一个实现
http.CookieJar
的类型,它的名称是,而不是
CookieJar.CookieJar

所以,只要使用常识,从软件包用户的角度(从他们的角度)来看待它<代码>foo.foo非常好。但是上面类似的例子是包含许多其他类型的包的一部分。如果这是您的软件包将导出的唯一类型,则根据使用情况,
foo.F
也可能是合理且可接受的。例如,有一些和类型故意缩短,因为它们经常甚至多次用于创建MongoDB查询。根据上下文,它们是什么是清楚的,不会引起麻烦或误解