【问题标题】:*boolean isn't compatible with *interface{} [duplicate]*boolean 与 *interface{} 不兼容 [重复]
【发布时间】:2023-03-16 10:46:02
【问题描述】:

我有这样的类型

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{},因为它可以返回整数、布尔值、浮点数等。 但是,编译器不允许我将 *boolean 作为 *interface{}

返回

【问题讨论】:

  • 永远不要使用指向接口的指针。它几乎没有任何意义。

标签: go pointers inheritance


【解决方案1】:

value 是一个布尔值,所以&amp;value 是一个指向布尔值的指针(不是指向interface{} 的指针)。如果你想返回一个指向接口的指针,那么你可以使用:

x := interface{}(value)
return &x, nil

Playground

但是,获取接口地址有用的情况并不多(请参阅此question 的答案),因此可能值得考虑是否有必要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 2013-08-21
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2019-04-05
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多