小编典典

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

go

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

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

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


阅读 271

收藏
2020-07-02

共1个答案

小编典典

您可以执行以下操作(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)
}
2020-07-02