(2) 分别定义两个结构体: 学生:包含学号(字符串),姓名(字符串),已修学分(整数) 老师:包含工号(整数),姓名(字符串) 一个切片中放入 1 个学生 和 1 个老师的实例(数据自行设定),分别打印出两个结构体实例中所有字段的字段名和字段值。 要求:切片中可放入任意个学生或任意个老师的实例,用于打印的程序语句均不需要修改,仍可打印结果。(体现使用反射的优势) 在主程序中验证结果。 知识点:反射、反射值、结构体 提示:使用reflect.Value类型的方法: func (v Value) NumField() int // 返回结构体的字段数量 func (v Value) Field(i int) Value // 返回结构体中的第 i 个字段 golang
时间: 2024-02-18 18:02:25 浏览: 95
STM32串口实验+自定义协议接收16进制数据+发送1个(2个)字符+发送字符串函数.zip
以下是实现代码:
```go
package main
import (
"fmt"
"reflect"
)
type Student struct {
ID string
Name string
CreditHour int
}
type Teacher struct {
ID int
Name string
}
func main() {
var data []interface{}
data = append(data, Student{"1001", "Tom", 60})
data = append(data, Teacher{2001, "Jerry"})
for _, v := range data {
val := reflect.ValueOf(v)
typ := reflect.TypeOf(v)
fmt.Printf("Type: %v\n", typ)
for i := 0; i < val.NumField(); i++ {
field := val.Field(i)
fmt.Printf("%v: %v\n", typ.Field(i).Name, field.Interface())
}
fmt.Println()
}
}
```
输出结果:
```
Type: main.Student
ID: 1001
Name: Tom
CreditHour: 60
Type: main.Teacher
ID: 2001
Name: Jerry
```
通过使用反射,我们可以在不知道具体类型的情况下,打印出结构体实例中所有的字段名和字段值。这样就实现了对于任意个学生或任意个老师的实例进行打印输出的需求。
阅读全文