如何在 Go 中查找对象的类型?

新手上路,请多包涵

我如何在 Go 中找到对象的类型?在 Python 中,我只使用 typeof 来获取对象的类型。同样在 Go 中,有没有办法实现相同的?

这是我正在迭代的容器:

 for e := dlist.Front(); e != nil; e = e.Next() {
    lines := e.Value
    fmt.Printf(reflect.TypeOf(lines))
}

在这种情况下,我无法获得对象行的类型,它是一个字符串数组。

原文由 Rahul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 513
2 个回答

Go 反射包有检查变量类型的方法。

以下代码片段将打印出字符串、整数和浮点数的反射类型。

 package main

import (
    "fmt"
    "reflect"
)

func main() {

    tst := "string"
    tst2 := 10
    tst3 := 1.2

    fmt.Println(reflect.TypeOf(tst))
    fmt.Println(reflect.TypeOf(tst2))
    fmt.Println(reflect.TypeOf(tst3))

}

输出:

 string
int
float64

请参阅: http ://play.golang.org/p/XQMcUVsOja 查看实际效果。

更多文档在这里:http: //golang.org/pkg/reflect/#Type

原文由 dethtron5000 发布,翻译遵循 CC BY-SA 4.0 许可协议

我找到了 3 种在运行时返回变量类型的方法:

使用 字符串格式

func typeof(v interface{}) string {
    return fmt.Sprintf("%T", v)
}

使用 反射包

func typeof(v interface{}) string {
    return reflect.TypeOf(v).String()
}

使用 类型断言

func typeof(v interface{}) string {
    switch v.(type) {
    case int:
        return "int"
    case float64:
        return "float64"
    //... etc
    default:
        return "unknown"
    }
}

每种方法都有不同的最佳用例:

  • 字符串格式 - 短小的足迹(不需要导入反射包)

  • 反射包 - 当需要有关我们可以访问完整反射功能的类型的更多详细信息时

  • 类型断言 - 允许对类型进行分组,例如将所有 int32、int64、uint32、uint64 类型识别为“int”

原文由 Grzegorz Luczywo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题