反射的字符串方法.值未按预期工作



我正在尝试从反射中检索字符串值。价值,

我希望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)
}
Value的文档。字符串解释行为:

与其他getter不同,如果v的Kind不是String,它不会恐慌。相反,它返回一个形式为"<T value>"的字符串,其中T是v类型

字符串只是fmt的一个实现。Stringer接口。

如果需要值本身,可以在反射时使用Interface函数。值,然后进行类型断言以获取字符串。示例:

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)
}

游乐场链接

最新更新