*布尔值与* interface {}不兼容

问题描述

我有这样的类型

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的回答),因此可能值得考虑是否有必要。