本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

面试题

一、选择题

1.Golang支持反射,反射最常见的使用场景是做对象的序列化,这句话是否正确()

A.正确
B.错误
答案:A

二、简答题

1.Go的反射包怎么找到对应的方法

v := reflect.ValueOf(&person) // 注意一定是指针 v2 := v.MethodByName("Get1") // 调用 v2.Call([]reflect.Value{})

2.分别说说typeOf和valueOf

TypeOf() 函数返回一个接口,这个接口定义了一系列方法,利用这些方法可以获取关于类型的所有信息; ValueOf() 函数返回一个结构体变量,包含类型信息以及实际值。

3.说说反射的使用场景

1.做对象的序列化,构建适用于不同类型的工具
2.序列化和反序列化,比如json, protobuf等各种数据协议
3.各种数据库的ORM,比如gorm,sqlx等数据库中间件
4.配置文件解析相关的库,比如yaml、ini等
5.编写一个函数,但是并不知道传给你的参数类型是什么
6.需要根据某些条件决定调用哪个函数,调用的函数是字符串参数

4.如何获取结构体中的tag标签?

t := reflect.TypeOf(&student) // 注意使用指针 field0 := t.Elem().Field(0) fmt.Printf("tag json=%s\n", field0.Tag.Get("json"))

5.反射中,typeOf返回的Type接口,有关method的都有什么方法?

// 返回类型方法集里的第 `i` (传入的参数)个方法 Method(int) Method // 通过名称获取方法 MethodByName(string) (Method, bool) // 获取类型方法集里导出的方法个数 NumMethod() int

6.反射中,typeOf返回的Type接口,有关field的都有什么方法?

7.反射中,typeOf返回的Type接口,Elem函数有什么作用?

// 返回内部子元素类型,只能由类型 Array, Chan, Map, Ptr, or Slice 调用 Elem() Type 举例: func SetValue(age int) { value_age := reflect.ValueOf(&age) //这里必须使用指针的方式 fmt.Println(value_age.Type()) // *int的赋值:*age = 4 value_age.Elem().SetInt(4) // Elem returns a type's element type. fmt.Printf("After set x is %v\n",age) }

1617人已阅读,今天你学习了吗?

添加新回复