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