我如何在围棋中找到对象的类型?在Python中,我只使用typeof来获取对象的类型。在围棋中也有类似的情况,有没有办法实现同样的情况?

下面是我正在迭代的容器:

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

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


当前回答

反映包来拯救:

reflect.TypeOf(obj).String()

检查这个演示

其他回答

我就会远离反思。包中。而是使用%T

package main

import (
    "fmt"
)

func main() {
    b := true
    s := ""
    n := 1
    f := 1.0
    a := []string{"foo", "bar", "baz"}

    fmt.Printf("%T\n", b)
    fmt.Printf("%T\n", s)
    fmt.Printf("%T\n", n)
    fmt.Printf("%T\n", f)
    fmt.Printf("%T\n", a)
 }

如果你想检测if表达式中的类型:

if str, ok := myvar.(string); ok {
    print("It's a string")
}

或者没有类型断言(可能会产生错误):

if reflect.TypeOf(myvar).String() == "string" {
    print("It's a string")
}

对于数组和切片,使用Type.Elem():

a := []string{"foo", "bar", "baz"}
fmt.Println(reflect.TypeOf(a).Elem())

使用反射包:

包反射实现运行时反射,允许程序 操作任意类型的对象。典型的用法是取a 值与静态类型接口{}并提取其动态类型 信息调用TypeOf,返回一个类型。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    b := true
    s := ""
    n := 1
    f := 1.0
    a := []string{"foo", "bar", "baz"}

    fmt.Println(reflect.TypeOf(b))
    fmt.Println(reflect.TypeOf(s))
    fmt.Println(reflect.TypeOf(n))
    fmt.Println(reflect.TypeOf(f))
    fmt.Println(reflect.TypeOf(a))
}

生产:

bool
string
int
float64
[]string

操场上

使用ValueOf(i interface{}).Kind()的示例:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    b := true
    s := ""
    n := 1
    f := 1.0
    a := []string{"foo", "bar", "baz"}

    fmt.Println(reflect.ValueOf(b).Kind())
    fmt.Println(reflect.ValueOf(s).Kind())
    fmt.Println(reflect.ValueOf(n).Kind())
    fmt.Println(reflect.ValueOf(f).Kind())
    fmt.Println(reflect.ValueOf(a).Index(0).Kind()) // For slices and strings
}

生产:

bool
string
int
float64
string

操场上

你可以使用reflect.TypeOf。

基本类型(如。: int, string):它将返回它的名称(例如:int, string) 结构:它将返回格式为<包名>的内容。<struct name>(例如:main.test)