idiomatic包中struct的名称?

问题描述 投票:4回答:1

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

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

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

var f foo.Foo

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

f := foo.New(...)

go idiomatic
1个回答
5
投票

没关系,这也是惯用的。

标准库中的类似示例:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.