面试题答案
一键面试应用场景
- 函数参数校验:当函数通过反射获取参数值并进行处理时,如果参数是基础类型且可能为零值,需要特别关注。例如一个计算平方根的函数,若输入参数为负数(基础类型
int
的零值或其他无效值),会导致计算错误。 - 数据库操作:从数据库读取数据到结构体时,若结构体字段是基础类型,可能出现零值情况。如读取用户年龄字段,若数据库记录缺失该值,可能得到
int
类型的零值,在后续业务逻辑中,这可能导致错误,比如计算平均年龄时。 - 网络通信:在解析网络传输的数据时,对于基础类型字段可能接收零值。例如通过HTTP请求获取用户ID,如果请求参数缺失,可能解析出
int
类型零值,在后续查找用户信息时会导致错误。
代码检测与处理
package main
import (
"fmt"
"reflect"
)
func main() {
var num int
valueOf := reflect.ValueOf(num)
// 检测是否为零值
if valueOf.Kind() == reflect.Int && valueOf.Int() == 0 {
// 处理零值
num = 1
valueOf = reflect.ValueOf(num)
}
fmt.Println(valueOf.Int())
}
在上述代码中,首先获取int
类型变量num
的反射值,通过Kind
方法判断类型为int
,并且使用Int
方法获取值判断是否为零值。如果是零值,则对其进行处理(这里将其赋值为1),从而避免因零值导致的潜在逻辑错误。