Golang 如何找到Struct的类型
Golang中的结构或Struct是用户定义的数据类型,是各种数据字段的组成。每个数据字段都有自己的数据类型,可以是内置的或另一个用户定义的类型。结构表示具有一些属性/字段的任何现实世界实体。Go不支持类的概念,结构是在该语言中创建用户定义类型的唯一方法。有多种方法可以识别Go中的struct的类型:
方法1: 使用reflect包
您可以使用reflect包查找struct的给定类型。反射包允许在运行时确定变量的类型。
语法:
func typeofstruct(x interface{}){
fmt.Println(reflect.TypeOf(x))
}
或
func typeofstruct(x interface{}){
fmt.Println(reflect.ValueOf(x).Kind())
}
例子:
package main
// 导入所需模块
import (
"fmt"
"reflect"
)
//定义struct学生
type Student struct {
name string
rollno int
phone int64
city string
}
func main() {
// 实例化struct
// 注意:数据字段应按照其在struct定义中声明的顺序输入
var st1 = Student{"Raman", 01, 88888888888, "Mumbai"}
fmt.Println(reflect.TypeOf(st1))
fmt.Println(reflect.ValueOf(st1).Kind())
// 初始化struct时命名字段
st2 := Student{name: "Naman", rollno: 02,
phone: 1010101010, city: "Delhi"}
fmt.Println(reflect.TypeOf(st2))
fmt.Println(reflect.ValueOf(st2).Kind())
}
输出:
main.Student
struct
main.Student
struct
reflect.TypeOf方法返回main.Student类型,而reflect.Kind方法返回struct。这是因为reflect.TypeOf方法返回reflect.Type类型的变量。reflect.Type包含有关定义传递的变量的类型的所有信息,在此例中为Student。类型说明此类型最初是由指针、int、string、struct、interface或另一种内置数据类型组成。在我们的情况下,类型是Student,种类是struct。
方法2: 使用类型断言
检查struct类型的另一种方法是使用类型switch并执行多个类型断言。类型switch使用连续的多个类型断言以及运行第一个匹配类型。在此switch中,case包含要与switch表达式中存在的类型进行比较的类型,如果没有一个case匹配,则评估默认case。
语法:
switch optstatement; typeswitchexpression{
case typelist 1: Statement..
case typelist 2: Statement..
...
default: Statement..
}
例子:
//使用类型断言查找struct类型的Golang程序
package main
import "fmt"
// struct Employee definition
type Employee struct {
name string
employee_id int
}
func Teststruct(x interface{}) {
// 使用类型switch
switch x.(type) {
case Employee:
fmt.Println("Employee type")
case int:
fmt.Println("int type")
default:
fmt.Println("Error")
}
输出:
Employee type
极客教程