Go之零值判断

Python因弱类型可通过简单的if x判断零值,有内置自动装箱判断处理。而Go语言判断零值可借助反射reflect来处理,文中还提及了测试及结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python判断零值很简单,因为是弱类型,所以会内置自动装箱判断处理。

只需要 if x : 即可。但是go如何判断?这里可以借助反射reflect处理。

func IsZeroOfInterface(x interface{}) bool {
	if x == nil {
		return true
	}
	value := reflect.ValueOf(x)
	switch value.Kind() {
	case reflect.String:
		return value.Len() == 0
	case reflect.Bool:
		return !value.Bool()
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
		return value.Int() == 0
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
		return value.Uint() == 0
	case reflect.Float32, reflect.Float64:
		return value.Float() == 0
	case reflect.Interface, reflect.Ptr:
		return value.IsNil()
	}
	return reflect.DeepEqual(value.Interface(), reflect.Zero(value.Type()).Interface())
}

测试

func TestIsZeroOfInterface(t *testing.T) {
	// int
	fmt.Println(IsZeroOfInterface(0))
	fmt.Println(IsZeroOfInterface(1))
	// string
	fmt.Println(IsZeroOfInterface(""))
	fmt.Println(IsZeroOfInterface("111"))
	// bool
	fmt.Println(IsZeroOfInterface(true))
	fmt.Println(IsZeroOfInterface(false))
	//struct
	type Person struct {
		Name string
		Age  int
	}
	var person Person
	person2 := Person{Name: "hu"}
	fmt.Println(IsZeroOfInterface(person))
	fmt.Println(IsZeroOfInterface(person2))
	person2.Age = 11
	fmt.Println(IsZeroOfInterface(person2))
	// nil
	fmt.Println(IsZeroOfInterface(nil))
}

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值