当前位置: 首页 > 面试题库 >

在Go中创建具有约束的自定义类型

易俊驰
2023-03-14
问题内容

如何在Go中创建只能接受有效值的自定义类型?例如,我要创建一个名为“名称”的类型,其基础类型为字符串。但是,它只能接受值“ John”,“ Rob”或“
Paul”。其他任何值都将返回错误。我已经以非常简单的方式创建了以下程序,以表示我想要实现的目标。

http://play.golang.org/p/jzZwALsiXz

编写此代码的最佳方法是什么?


问题答案:

您可以执行以下操作(http://play.golang.org/p/JaIr_0a5_-):

type Name struct {
    string
}

func (n *Name) String() string {
    return n.string
}

func NewName(name string) (*Name, error) {
    switch name {
    case "John":
    case "Paul":
    case "Rob":
    default:
        return nil, fmt.Errorf("Wrong value")
    }
    return &Name{string: name}, nil
}

Golang不提供运算符重载,因此您无法在投射或影响值时进行检查。

根据您要尝试执行的操作,可能需要执行以下操作(http://play.golang.org/p/uXtnHKNRxk):

type Name string

func (n Name) String() string {
    switch n {
    case "John":
    case "Paul":
    case "Rob":
    default:
        return "Error: Wrong value"
    }
    return string(n)
}


 类似资料:
  • 我目前正试图用Gekko的分支来解决一个混合整数非线性问题 以下是我迄今为止的尝试:

  • 我在项目中使用bean验证,我想为现有的约束注释编写一个自定义验证器。 例如,我有一个类,它表示一个名为CustomDateTime的日期/时间。在使用此类作为例如出生日期的类中,我想用过去的日期对字段进行注释: 然后,我通过实现ConstraintValidator创建一个自定义验证器 我知道您通常会创建这样的单独注释: 但对我来说,这似乎是双重代码;-) 如何注册要与一起使用的自定义验证器?

  • 我有一个自定义注释@UniqueModel,它由ConstraintValidator验证: 问题是,我需要在调用存储库的safe()-方法之前进行验证,否则字段注入将无法工作。 因此,我创建了一个带有@Valid注释的委托方法,以便在以下情况之前强制进行唯一验证: 不幸的是,这不起作用,似乎@Valid注释被Spring忽略了。 我如何确保验证的正确时间?

  • Youtrack上有几种类型,如OwnedField[1]、Group[1]等。 是否可以创建一个自定义类型,该类型具有自定义字段,如ownedField具有链接到用户的自定义字段? 我们希望将类似的行为应用于ownedField,其中,当您选择一个子系统字段(类型为ownedField)时,它会“自动”用与该子系统关联的用户填充问题的字段“受理人”。

  • 该到你发挥创意的时间了。你已经知道了各种不同的 Puppet 资源类型: 包(package), 文件(file)、用户(user),等等。 通常情况下,你既可以组合使用这些内置资源类型做你需要做的一切, 又可以通过一个自定义 define 作为一种资源(以内置资源同样的方式)来使用 (参见第 4 章 书写更优质的配置清单 中有关 define 的内容)。 但是,如果你需要创建自己的资源类型,Pu

  • 我已经为此斗争了好几天,我已经阅读了这里的所有讨论,但没有解决方案...... 我有一个自定义约束… 独一无二.java 这是由UniqueConstraintValidator使用的.java 现在,我的模型有这个注释,我需要在其中验证字段的唯一性 现在,我知道自定义注释在更新现有对象时不起作用,但是现在我需要了解它是如何工作的。假设我们想要添加一个新对象。 当我试图保存一个已经存在的值时,我得