dsf5632 2016-04-30 09:50
浏览 4
已采纳

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

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条回答 默认 最新

  • dongxianghuan3587 2016-04-30 10:23
    关注

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

    Playground link

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 统计大规模图中的完全子图问题
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式