Go 键入别名以用于文档编制
使用类型别名使go代码更加自文档化是否被认为是一种良好的做法?例如:Go 键入别名以用于文档编制,go,type-alias,Go,Type Alias,使用类型别名使go代码更加自文档化是否被认为是一种良好的做法?例如: type User struct { // user stuff } type Username = string func Foo(users map[Username]User){ // do stuff } 很明显,Foo采用了从用户名到用户结构的映射,而不需要在注释中解释任何内容,如果类型定义是map[string]user,则可能需要这样做。这种方法有什么缺点吗 函数参数类似于局部变量,但它们也
type User struct {
// user stuff
}
type Username = string
func Foo(users map[Username]User){
// do stuff
}
很明显,Foo采用了从用户名到用户结构的映射,而不需要在注释中解释任何内容,如果类型定义是map[string]user
,则可能需要这样做。这种方法有什么缺点吗
函数参数类似于局部变量,但它们也用作
文件
如果类型是描述性的,则应简短:
func AfterFunc(d Duration,f func())*计时器
函数转义(带io.Writer,s[]字节)
如果类型更不明确,
这些名称可提供以下文件:
func Unix(秒,nsec int64)时间
func HasPrefix(s,前缀[]字节)bool
引自。使类型不那么模棱两可似乎是一个值得追求的目标。time.Duration只是
类型Duration int64
,它不是一个别名,但纯粹从文档的角度来看,我认为效果是类似的。别名声明无论如何都不会创建一个不同于创建它的类型的新类型。它只是为T2表示的类型引入了别名T1,这是另一种拼写
类型别名不适合日常使用。引入它们是为了在大规模重构期间在包之间移动类型时支持渐进式代码修复。代码库重构(在Go的帮助下)详细介绍了这一点
检查此项以了解更多信息别名声明无论如何都不会创建一个新的不同类型,该类型不同于它创建时使用的类型。它只是为T2表示的类型引入了别名T1,这是另一种拼写 类型别名不适合日常使用。引入它们是为了在大规模重构期间在包之间移动类型时支持渐进式代码修复。代码库重构(在Go的帮助下)详细介绍了这一点 查看此以了解更多信息 使用类型别名使go代码更加自文档化是否被认为是一种良好的做法 不,一点也不 类型别名是表示类型关系的一种技术方法,对于大规模重构等特殊情况,这种方法是无法实现的 在文档中滥用类型别名是完全不可能的 使用类型别名使go代码更加自文档化是否被认为是一种良好的做法 不,一点也不 类型别名是表示类型关系的一种技术方法,对于大规模重构等特殊情况,这种方法是无法实现的
在文档中滥用类型别名是完全不可能的。我不愿回答,因为这最终是一个自以为是的问题。但我避免这样做的原因是:
map[string]User
应该将用户名映射到用户。如果您有多个类似的映射,一个映射用户名,一个映射用户名,例如,变量的名称应该消除歧义。否则,类型别名可能也不够用。你需要一些清晰的文档我不愿回答,因为这最终是一个自以为是的问题。但我避免这样做的原因是:
map[string]User
应该将用户名映射到用户。如果您有多个类似的映射,一个映射用户名,一个映射用户名,例如,变量的名称应该消除歧义。否则,类型别名可能也不够用。你需要一些清晰的文档什么是否定的?我理解类型别名的原意,但还没有找到任何权威的wrt使用它们来编写文档。这是一个很好的迹象,表明它并没有被广泛认为是良好的实践,但我想知道为什么,因为它似乎遵循了一些go咒语,比如清晰。@user2133814它不是一个适当的文档,是一种滥用。有什么不好的地方吗?我理解类型别名的原意,但还没有找到任何权威的wrt使用它们来编写文档。这是一个很好的迹象,表明它不是被广泛认为的良好实践,但我想知道为什么,因为它似乎遵循了一些go咒语,比如清晰。@user2133814它不是一个适当的文档,也是一种滥用。我理解它们是什么,以及它们为什么被创建。你能找到一些不适合日常使用的参考资料吗?我了解它们是什么,以及它们为什么被创建。你能找到一些不适合日常使用的参考资料吗?它提供的好处并不比注释
//Username
多,这也没有多大帮助。为您的地图声明一个实际的类型并编写文档,这样会更容易接受。@JimB类似于type-Users-map[string]User
的内容,以及一个有用的docstring?我同意我的例子中的名字不太好,但这在某种程度上是提出最简单例子的副作用