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/