【问题标题】:Golang reflect, how to get map value type?Golang反映,如何获取地图值类型?
【发布时间】:2016-12-05 12:32:50
【问题描述】:

对于 golang 中的映射 m,我们可以使用 t.Key() 简单地获取键类型。

但我想知道如何获取地图值类型?

当地图为空时,我们甚至不能使用v.MapIndex,有什么想法吗?

m := map[string]int{}
t := reflect.TypeOf(m)
v := reflect.ValueOf(m)
t.Key()
v.MapIndex()

【问题讨论】:

  • 请问您为什么要这样做? Go 具有强类型,这意味着类型是在编译时确定的。因此,开发人员应该清楚它是什么类型。
  • 因为有时我们需要反射。新的键和值,并为每一对注入值。

标签: go reflection


【解决方案1】:

Elem() 的地图类型将为您提供元素的类型:

var m map[string]int
fmt.Println(reflect.TypeOf(m).Elem())
// output: int

【讨论】:

    【解决方案2】:

    这里是获取地图键和地图元素类型的示例:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main() {
        fmt.Println("Hello, playground")
        var m map[string]int
        fmt.Println(reflect.TypeOf(m).Key())
        fmt.Println(reflect.TypeOf(m).Elem())
    }
    
    

    游乐场here

    文档在这里https://golang.org/pkg/reflect/#Type

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多