如何在Go中创建自定义类型,只能接受有效值?例如,我想创建一个名为"Names"的类型,其底层类型是一个字符串.但是它只能接受"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
}
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)