Go语言如何检查变量是否为空值?
检查变量
Go语言中,当变量时没有显式初始化的,就会赋予零值或空值。
比如,int 默认初始值为0,string 的初始值为 空字符串,bool 的初始值为 false。
那么我们就可以通过判断这些值,来确定变量是否为空值。
package main
import (
"fmt"
)
// 变量变量时没有显式初始化的,会赋予零值。
func main() {
fmt.Println("----> check variable :")
// 数值型,直接检查0值
var i int
if i == 0 {
fmt.Println("---> i (int) 的值为0 : ", i)
}
// 字符串: 可以检查是否为空字符串,或者其长度
var s string
if s == "" {
fmt.Println("---> 字符串 s 的值为空 : ", s)
}
if len(s) == 0 {
fmt.Println("---> 字符串 s 的长度为0 : ", len(s))
}
// 布尔值
var b bool
if b == false {
fmt.Println("---> 布尔型 b 的值为: ", b)
}
}
数组
数组可以使用其长度来判断,是否为空数组。
// var a []int
var a []int
a = []int{1,2,3}
if len(a) == 0 {
fmt.Printf("---> 数组 len(a): %v\n", len(a))
}
if cap(a) == 0 {
fmt.Printf("---> 数组 cap(a): %v\n", cap(a))
}
fmt.Printf("---> 数组 len(a): %v cap(a): %v\n", len(a), cap(a))
map 类型
map 类型可以使用 nil 和 len() 判断:
// map
var m map[int]string
if m == nil {
fmt.Printf("---> map[int]string 检查nil: %v\n", m)
}
if len(m) == 0 {
fmt.Printf("---> map[int]string 检查长度: %v\n", m)
}
结构体
结构体可以通过其字段来判断。
// 结构体
type MyStruct struct {
Name string
}
var struct1 MyStruct
if struct1.Name == "" {
// ---> 结构体 struct1.Name 值为空: {}
fmt.Printf("---> 结构体 struct1.Name 值为空: %v\n", struct1)
}
使用反射 reflect
可以使用反射提供的方法检查。
// import "reflect"
func is_empty(data interface{}) {
v := reflect.ValueOf(data)
if !v.IsValid() { // 值不存在
return true;
}
return false;
}
参考链接
https://golangtutorial.dev/tips/check-for-empty-string/
https://www.geeksforgeeks.org/checking-if-structure-is-empty-or-not-in-golang/