问题描述
我有这样的类型
type Transformer func(raw string) (*interface{},error)
var TransformBoolean Transformer = func(raw string) (*interface{},error) {
var value bool
if raw == "true" {
value = true
} else if raw == "false" {
value = false
} else {
return nil,Error{"Invalid"}
}
return &value,nil // <-- Here's the error
}
函数返回类型为interface {},因为它可以返回int,boolean,float等。 但是,编译器不允许我将* boolean作为* interface {}
返回解决方法
value
是布尔值,因此&value
是指向布尔值的指针(不是指向interface{}
的指针)。如果要返回指向接口的指针,则可以使用:
x := interface{}(value)
return &x,nil
请参见Playground。
但是,在很多情况下,采用接口地址是有用的(请参阅对此question的回答),因此可能值得考虑是否有必要。