Golang零值、空值与空结构的使用小结

作者:

文章目录
  • 对于值类型:布尔类型为 false, 数值类型为 0,字符串为 "",数组和结构会递归初始化其元素或字段,即其初始值取决于元素或字段。 对于引用类型: 均为 nil,包括指针 pointer,函数 function,接口 interface,切片 slice,管道 channel,映射 map。
  • 空值(nil) :在Go语言中,nil是一个预定义的标识符,用于表示指针、通道(channel)、映射(map)、切片(slice)、函数以及接口类型的“零值”。它相当于这些类型的“无”或“不存在”。例如,一个nil指针不指向任何内存地址,而一个nil通道不连接任何发送者或接收者。 初始化未使用的指针或引用类型变量。 检查一个变量是否已被初始化或有效。 在错误处理中,表示一个操作没有返回错误。
  • 作用二 使用 chan struct{} 代替 chan bool 在 goroutines 之间传递信号。使用 bool 容易让人不理解该值,true or false,但是使用 chan struct{} 就很清楚,我们不在乎值,只关心发生的事儿,更容易表达清楚一些。 作用一 用来强制使用字段名来初始化结构体,防止未命名的初始化方式。 正常的结构体 type Q struct { X, Y int } // 两种初始化方式都可以 q1 := Q{X: 1, Y: 1} // 推荐:使用字段名 q2 := Q{1, 1} // 不推荐:按位置初始化 添加 _ struct{} 后的结构体 type Q struct { X, Y int _ struct{} // 添加这个字段 } // 现在只能这样初始化 q1 := Q{X: 1, Y: 1} // ✅ 编译通过 // 这样会报错 q2 := Q{1, 1} // ❌ 编译错误:too few values in struct initializer 到此这篇关于Golang 零值、空值与空结构的使用小结的文章就介绍到这了,更多相关Golang 零值、空值与空结构内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Golang中由零值和gob库特性引起BUG解析 golang 删除切片的某个元素及剔除切片内的零值方式 解决golang 反射interface{}做零值判断的一个重大坑 Golang中gorm无法将字段更新为空值 Golang空结构体struct{}用途,你知道吗
  • 目录
    • 零值
    • nil
    • 空结构

    • 对于值类型:布尔类型为 false, 数值类型为 0,字符串为 "",数组和结构会递归初始化其元素或字段,即其初始值取决于元素或字段。
    • 对于引用类型: 均为 nil,包括指针 pointer,函数 function,接口 interface,切片 slice,管道 channel,映射 map。

    空值(nil) :在Go语言中,nil是一个预定义的标识符,用于表示指针、通道(channel)、映射(map)、切片(slice)、函数以及接口类型的“零值”。它相当于这些类型的“无”或“不存在”。例如,一个nil指针不指向任何内存地址,而一个nil通道不连接任何发送者或接收者。

    • 初始化未使用的指针或引用类型变量。
    • 检查一个变量是否已被初始化或有效。
    • 在错误处理中,表示一个操作没有返回错误。

    作用二

    使用 chan struct{} 代替 chan bool 在 goroutines 之间传递信号。使用 bool 容易让人不理解该值,true or false,但是使用 chan struct{} 就很清楚,我们不在乎值,只关心发生的事儿,更容易表达清楚一些。

    作用一

    用来强制使用字段名来初始化结构体,防止未命名的初始化方式。

    正常的结构体

    type Q struct {
        X, Y int
    }
    
    // 两种初始化方式都可以
    q1 := Q{X: 1, Y: 1}  // 推荐:使用字段名
    q2 := Q{1, 1}        // 不推荐:按位置初始化
    

    添加 _ struct{} 后的结构体

    type Q struct {
        X, Y int
        _    struct{}  // 添加这个字段
    }
    
    // 现在只能这样初始化
    q1 := Q{X: 1, Y: 1}  // ✅ 编译通过
    
    // 这样会报错
    q2 := Q{1, 1}        // ❌ 编译错误:too few values in struct initializer
    

    到此这篇关于Golang 零值、空值与空结构的使用小结的文章就介绍到这了,更多相关Golang 零值、空值与空结构内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Golang中由零值和gob库特性引起BUG解析
    • golang 删除切片的某个元素及剔除切片内的零值方式
    • 解决golang 反射interface{}做零值判断的一个重大坑
    • Golang中gorm无法将字段更新为空值
    • Golang空结构体struct{}用途,你知道吗

    站内搜索