Go语言如何检查变量是否为空值?

Go语言如何检查变量是否为空值?

检查变量

Go语言中,当变量时没有显式初始化的,就会赋予零值或空值。

比如,int 默认初始值为0,string 的初始值为 空字符串,bool 的初始值为 false。

那么我们就可以通过判断这些值,来确定变量是否为空值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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)
}
}

数组

数组可以使用其长度来判断,是否为空数组。

1
2
3
4
5
6
7
8
9
10
// 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() 判断:

1
2
3
4
5
6
7
8
// 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)
}

结构体

结构体可以通过其字段来判断。

1
2
3
4
5
6
7
8
9
10
// 结构体
type MyStruct struct {
Name string
}

var struct1 MyStruct
if struct1.Name == "" {
// ---> 结构体 struct1.Name 值为空: {}
fmt.Printf("---> 结构体 struct1.Name 值为空: %v\n", struct1)
}

使用反射 reflect

可以使用反射提供的方法检查。

1
2
3
4
5
6
7
8
9
10
// 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/