何时使用基本类型

时间:2018-03-26 11:48:12

标签: go type-definition

我的问题是Go中的类型定义以及何时将其用于基本类型 请考虑以下示例 我有这个结构,代表我的数据库中的一行:

type DBEntityAttribute struct {
    Id              uint64
    EntityId        uint64
    EndPointNumber  uint8
    AttributeNumber uint8
    ParentId        uint64
    Value           string
    Tag             int
    ContentType     sql.NullString
    Maturity        int
    Author          int
    AttributeType   string
    IsNegated       bool
}

EntityId和AttributeNumber是我在代码中的各种结构中使用的属性。
现在我想把它重构成这样的东西:

type EntityId uint64

type AttributeNumber uint8

type DBEntityAttribute struct {
        Id              uint64
        EntityId        EntityId
        EndPointNumber  uint8
        AttributeNumber AttributeNumber
        ParentId        uint64
        Value           string
        Tag             int
        ContentType     sql.NullString
        Maturity        int
        Author          int
        AttributeType   string
        IsNegated       bool
    }

这将允许我在一个地方更改EntityId和AttributeNumber的类型。另外,当我传递一个entityId作为函数参数时,我现在可以给它特定的EntityId类型,而不是匿名的uint64。

我现在的问题是:

  • 这被认为是好的Go代码吗?
  • 我应该在哪里停止,这意味着我应该为代码中其他地方使用的每个属性声明一个不同的类型吗?或者只针对重要的人?

我知道这可能是主观的,但Go社区通常对某些模式表示同意,我希望遵守他们的指导原则。

1 个答案:

答案 0 :(得分:2)

关于何时使用自定义类型,没有硬性规定。我的个人规则是:

出现原因时使用自定义类型。

您想要在一个位置更改基础类型的原因似乎是一个很好的理由。

其他好的理由是:

  • 分配自定义JSON(联合国)封送程序或其他接口方法
  • 作为文档
  • 与常量结合使用,作为枚举
  • 改善了类型安全性(避免意外将FooID分配给BarID