【问题标题】:String method of reflect.Value does not work as expectedreflect.Value 的字符串方法没有按预期工作
【发布时间】:2016-04-30 18:23:06
【问题描述】:

我正在尝试从 reflect.Value 中检索字符串值,

我希望value.String()okok,但我得到了<interface {} Value>

我错过了什么吗?

package main

import (
    "fmt"
    "reflect"
)

func dump(args *[]interface{}) {
    value := reflect.ValueOf(*args).Index(0)
    fmt.Println(value.String())
    if value.String() != "okok" {
        fmt.Println("miss")
    }
}

func main () {
    var args []interface{}
    args = append(args, "okok")
    dump(&args)
}

【问题讨论】:

    标签: reflection go


    【解决方案1】:

    documentation for Value.String 解释了这种行为:

    与其他 getter 不同,如果 v 的 Kind 不是 String,它不会恐慌。 相反,它返回一个“”形式的字符串,其中 T 是 v 输入。

    String 只是 fmt.Stringer 接口的一个实现。

    如果你想要值本身,你可以在 reflect.Value 上使用Interface function,然后做一个类型断言来获取字符串。示例:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func dump(args *[]interface{}) {
        value := reflect.ValueOf(*args).Index(0)
        str := value.Interface().(string)
        fmt.Println(str)
        if str != "okok" {
            fmt.Println("miss")
        }
    }
    
    func main() {
        var args []interface{}
        args = append(args, "okok")
        dump(&args)
    }
    

    Playground link

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2019-08-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多