美文网首页
go 的零值总结

go 的零值总结

作者: wayyyy | 来源:发表于2022-09-07 01:30 被阅读0次

面试中经常遇到,特此总结一下。

bool int float string 零值
func main() {
   var i int
   var f float64
   var b bool
   var s string
   fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

输出:

image.png
指针 零值
slice 零值

slice 的零值是nil

var s1 []string  

nil slice 的 len 和 cap 都为 0

func main() {
    var s1 []string  
    fmt.Println("len:", len(s1), "cap:", cap(s1))
}
image.png

但是 nil slice 追加是安全的

func main() {
    var s1 []string  
    s1 = append(s1, "hello")    
}
map 零值

map 的零值是nil

var m map[string]int  

nil map 的 len 为0

func main() {
    var m map[string]int 
    fmt.Println("len:", len(m))   
}
image.png

同时,在对一个 nil map 进行插入会导致 panic

func main() {
    var m map[string]int 
    m["tom"] = 12    // panic
}

但是查找和删除是安全的。

func main() {
    var m map[string]int
    v, exist := m["tom"]
    if exist {
        fmt.Println(v)
    } else {
        fmt.Println("not found")
    }

    delete(m, "tom")
}
channel 零值

channel 的零值是nil

var a chan int   // nil 通道

读写一个 nil channel 会一直阻塞。

function 零值

TODO

nil

nil 是go语言中预先定义的标识符,不是关键字或保留字。这可以让我们直接定义一个名称为 nil 的变量(并不推荐这样做),比如下面这样:

var nil = errors.New("nil")

不同类型的nil值占用的内存大小可能是不一样的:

var p *struct{} = nil
fmt.Println(unsafe.Sizeof(p)) // 8

var s []int = nil
fmt.Println(unsafe.Sizeof(s)) // 24

var m map[int]bool = nil
fmt.Println(unsafe.Sizeof(m)) // 8
go为什么需要零值机制?

1、将一个值设置为已知默认值的特性,对于程序的安全性和正确性非常重要。
2、零值机制使得 sync.Mutex,slices等无需显式初始化就可以使用,开箱即用。
3、同时还可以使你的 Go 程序更加简单和紧凑。

相关文章

  • go 的零值总结

    面试中经常遇到,特此总结一下。 bool int float string 零值 输出: 指针 零值 slice ...

  • Go Nil

    Go语言数据类型中,布尔类型的零值(初始值)为false,数值类型的零值为0,字符串类型的零值为空字符串""。 对...

  • 08. 零值

    Go语言的变量在没有明确初始化时,会有一个 零值,即默认值。不同类型的变量,零值是不同的。 数值型 零值为 0布...

  • Go语言中的零值

    Go语言中的零值是变量没有做初始化时系统默认设置的值。var b bool // bool型零值是falseva...

  • go 语言基础--函数

    1、函数 和C语言类型,Go语言也有函数的概念,语法如下: 2 参数和返回值 2.1 返回值 go 语言可以返回零...

  • Go语言的new和make

    在go语言中, 通过var声明变量时, 不指定默认值时, 就是使用他们的零值。 例如int类型的零值是0,stri...

  • GO语言基础(三)

    指针 Go 拥有指针。指针保存了值的内存地址。 类型 *T 是指向 T 类型值的指针。其零值为 nil。 & 操作...

  • Go基础-005-02 基础数据类型 整数型

    1. 零值 整数型的零值是: 0 2. 类型 1)概述: 典型的整型为 int 类型。在 go 中,提供了多个 i...

  • 【技术】Golang初探——指针、数组、map、函数

    指针 Go 具有指针。 指针保存了变量的内存地址。类型 *T 是指向类型 T 的值的指针。其零值是 nil。 '*...

  • Go基础-005-05 基础数据类型 字符串型

    1. 零值 零值:空字符串 ”“ 2. 类型 表示一组组合的集合。属于高级数据类型(复合数据类型)。在 Go 语言...

网友评论

      本文标题:go 的零值总结

      本文链接:https://www.haomeiwen.com/subject/tbewnrtx.html