英文:
String method of reflect.Value does not work as expected
问题
我正在尝试从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)
}
英文:
I'm trying to retrieve the string value from a reflect.Value,
I expect value.String()
to be okok
but I got <interface {} Value>
instead.
Did I miss something?
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
得分: 5
Value.String 的文档解释了其行为:
与其他的获取器不同,如果 v 的类型不是字符串,它不会引发 panic。相反,它返回一个形如 "
" 的字符串,其中 T 是 v 的类型。
String 只是 fmt.Stringer 接口的一个实现。
如果你想要获取值本身,你可以在 reflect.Value 上使用 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)
}
英文:
The documentation for Value.String explains the behavior:
> Unlike the other getters, it does not panic if v's Kind is not String.
> Instead, it returns a string of the form "<T value>" where T is v's
> type.
String is just an implementation of the fmt.Stringer interface.
If you want the value itself, you can use the Interface function on reflect.Value and then do a type assertion to get the string. Example:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论