微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决*布尔值与* 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的回答),因此可能值得考虑是否有必要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。