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,则可能需要这样做。这种方法有什么缺点吗 函数参数类似于局部变量,但它们也

使用类型别名使go代码更加自文档化是否被认为是一种良好的做法?例如:

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代码更加自文档化是否被认为是一种良好的做法

不,一点也不

类型别名是表示类型关系的一种技术方法,对于大规模重构等特殊情况,这种方法是无法实现的


在文档中滥用类型别名是完全不可能的。

我不愿回答,因为这最终是一个自以为是的问题。但我避免这样做的原因是:

  • 这是非常不明显的,因此可以说违反了规则。如果我在一些Go代码中遇到这个问题,我会认为这是一个错误,或者是迁移过程中的错误,我会尝试删除它
  • 即使从表面上看,文档的价值最多也是dubious。从上下文中应该非常清楚,
    map[string]User
    应该将用户名映射到用户。如果您有多个类似的映射,一个映射用户名,一个映射用户名,例如,变量的名称应该消除歧义。否则,类型别名可能也不够用。你需要一些清晰的文档
  • 最后,静态分析工具(如许多IDE中内置的工具)将把类型别名解析为其规范类型,这意味着任何可感知的文档价值都将受到限制

  • 我不愿回答,因为这最终是一个自以为是的问题。但我避免这样做的原因是:

  • 这是非常不明显的,因此可以说违反了规则。如果我在一些Go代码中遇到这个问题,我会认为这是一个错误,或者是迁移过程中的错误,我会尝试删除它
  • 即使从表面上看,文档的价值最多也是dubious。从上下文中应该非常清楚,
    map[string]User
    应该将用户名映射到用户。如果您有多个类似的映射,一个映射用户名,一个映射用户名,例如,变量的名称应该消除歧义。否则,类型别名可能也不够用。你需要一些清晰的文档
  • 最后,静态分析工具(如许多IDE中内置的工具)将把类型别名解析为其规范类型,这意味着任何可感知的文档价值都将受到限制

  • 什么是否定的?我理解类型别名的原意,但还没有找到任何权威的wrt使用它们来编写文档。这是一个很好的迹象,表明它并没有被广泛认为是良好的实践,但我想知道为什么,因为它似乎遵循了一些go咒语,比如清晰。@user2133814它不是一个适当的文档,是一种滥用。有什么不好的地方吗?我理解类型别名的原意,但还没有找到任何权威的wrt使用它们来编写文档。这是一个很好的迹象,表明它不是被广泛认为的良好实践,但我想知道为什么,因为它似乎遵循了一些go咒语,比如清晰。@user2133814它不是一个适当的文档,也是一种滥用。我理解它们是什么,以及它们为什么被创建。你能找到一些不适合日常使用的参考资料吗?我了解它们是什么,以及它们为什么被创建。你能找到一些不适合日常使用的参考资料吗?它提供的好处并不比注释
    //Username
    多,这也没有多大帮助。为您的地图声明一个实际的类型并编写文档,这样会更容易接受。@JimB类似于
    type-Users-map[string]User
    的内容,以及一个有用的docstring?我同意我的例子中的名字不太好,但这在某种程度上是提出最简单例子的副作用