reflect.Value的字符串方法无法按预期工作

时间:2016-04-30 09:50:19

标签: reflection go

我正在尝试从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)
}

1 个答案:

答案 0 :(得分:5)

documentation for Value.String解释了行为:

  

与其他getter不同,如果v的Kind不是String,则不会感到恐慌。   相反,它返回一个形式为&#34;&lt; T value&gt;&#34;的字符串。其中T是v&#39; s   类型。

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