如何在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) }