go 定义一个结构体并赋初始值_Golang 零值、空值与空结构

本文详细介绍了Golang中的零值、nil以及空结构的概念和应用场景。零值是变量未初始化时的默认值,如布尔型为false,数值型为0,字符串为空字符串等。nil用于表示引用类型的未初始化状态,而空结构虽然不占用内存,但在某些场景下有其特殊用途,如信号传递和防止unkeyed结构初始化。

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

3f704ce92ab66b604e976f14d3bec469.png

这篇文章我们讨论下有关 Golang 中的零值(The zero value)、空值(nil)和空结构(The empty struct)的相关问题以及它们的一些用途。

零值

零值是指当你声明变量(分配内存)并未显式初始化时,始终为你的变量自动设置一个默认初始值的策略。

首先我们来看看官方有关零值(The zero value)的规范:

When storage is allocated for a variable, either through a declaration or a call of new, or when a new value is created, either through a composite literal or a call of make, and no explicit initialization is provided, the variable or value is given a default value. Each element of such a variable or value is set to the zero value for its type: false for booleans, 0 for numeric types, "" for strings, and nil for pointers, functions, interfaces, slices, channels, and maps. This initialization is done recursively, so for instance each element of an array of structs will have its fields zeroed if no value is specified.

据此我们可总结出:

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

通常,为你声明的变量赋予一个默认值是有用的,尤其是为你数组和结构中的元素或字段设置默认值,这是一种保证安全性和正确性的做法,同时也可以让你的代码保持简洁。

比如,下面的示例是我们常用的,结构体 Value 中包含两个 unexported 字段,sync.Mutex 中也有两个 unexported 字段。因为有默认零值,所以我们可以直接使用:

package main

import "sync"

type Value struct {
    
    mu sync.Mutex
    val int
}

func (v *Value)Incr(){
    
    defer v.mu.Unlock()

    v.mu.Lock()
    v.val++
}

func main() {
    
    var i Value

    i.Incr()
}

因为切片是引用类型的,所以其零值也是 nil

package main

impor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值