【问题标题】:Define a custom type定义自定义类型
【发布时间】:2021-01-25 05:25:48
【问题描述】:

我想像这样在 GORM 中定义一个新类型:

type Device struct{
  gorm.Model
  Name string
  Status Status
}

Status 的值只能是okbrokenmissing 之一。显然,我可以为此使用类型字符串,但随后我将允许所有可能的字符串。如何将选项限制为我想要的选项?

【问题讨论】:

  • 您是否查看了自定义数据类型的文档? gorm.io/docs/data_types.html
  • @Eklavya 是的,我检查了它们。哪个部门应该处理我的案件?我没看到。
  • 如果您使用的是 postgres,您应该创建一个枚举类型并使用它,我相信您也可以在 gorm 标记中指定该字段的相关列属于该枚举类型。就 Go 而言,没有枚举类型,你不能强制,至少不能完全,一个字段的值,例如,即使 Status 声明为字段一的类型仍然可以使用 untyped 常量为不在声明的 Status 常量集中的字段分配值。

标签: go types go-gorm


【解决方案1】:

最简单的事情是这样的:

const (
    statusOk      = "ok"
    statusBroken  = "broken"
    statusMissing = "missing"
)

func isValidStatus(s string) error {
    switch s {
    case statusOk, statusBroken, statusMissing:
        return nil
    }
    return errors.New("Invalid status")
}

var d Device
// your code
// your code
// your code

if err := isValidStatus(d.Status); err != nil {
    // handle error
}
// valid status

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多