我有一个名为" foo"因为它定义了一个Foo结构和相关的东西,比如方法。
该包有一个New方法,它返回一个堆分配的Foo结构。
当包名称为" foo"时,将结构类型命名为Foo是否可以? ?我不确定,因为它会口吃。
var f foo.Foo
另一方面,编写
感觉很自然 f := foo.New(...)
答案 0 :(得分:5)
没关系,也是惯用语。
标准库中的类似示例:
另外,我猜foo.Foo
只是一个示例,但是对于您的实际类型名称,您也可以在类型名称中使用简化,正是因为包已经描述了它。例如,标准库中有一个http.CookieJar
接口,并且有一个net/http/cookiejar
包提供了一个实现http.CookieJar
的类型,它名为cookiejar.Jar
,而不是cookiejar.CookieJar
。
因此,只需使用常识并从包的用户(从他们的角度)的角度来看待它。 foo.Foo
完全没问题。但上面的类似示例是包含许多其他类型的包的一部分。如果这是您的软件包将导出的唯一类型,则根据使用情况,foo.F
也可能是合理且可接受的。例如,有bson.M
和bson.D
类型被故意缩短,因为它们经常使用甚至多次用于创建MongoDB查询。鉴于上下文,它们很清楚它们是什么,并且不会引起麻烦或误解。