Golang 如何找到Struct的类型

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程