自学内容网 自学内容网

【go从零单排】go中的nil到底是啥意思?

挪威特罗姆瑟夜景

Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

nil

在Go语言中,nil 是一个预定义的标识符,用于表示指针、切片、映射、通道、接口和函数的零值或空值。下面是 nil 在不同类型中的含义:

  1. 对于指针类型:nil 表示指针指向的是空地址,即没有指向任何有效的内存地址。

  2. 对于切片、映射、通道:nil 表示这些数据结构是空的,即没有分配任何元素或数据。

  3. 对于接口类型:nil 表示接口不包含任何值。

  4. 对于函数类型:nil 表示函数变量还没有被赋值。

在实际编程中,使用 nil 可以方便地表示某些数据结构的空值状态,而不需要使用特定的空值标记或者特殊值来表示空。在使用 nil 时需要注意以下几点:

  • 访问一个 nil 指针会导致运行时错误,因此在使用指针之前,需要确保它不是 nil
  • 对于切片、映射和通道,它们的零值就是 nil,因此在声明时不需要显式地初始化为 nil
  • 当一个接口值为 nil 时,它既不包含值也不包含具体类型。

总的来说,nil 在Go语言中是一个非常有用的概念,用于表示各种数据结构的空值状态。

指针类型

package main

import "fmt"

func main() {
var ptr *int //var变量声明一个指针,int类型,不赋值时默认为nil

if ptr == nil {
fmt.Println("Pointer is nil")
} else {
fmt.Println("Pointer is not nil")
}
}

切片

package main

import "fmt"

func main() {
    var s []int

    if s == nil {
        fmt.Println("Slice is nil")
    } else {
        fmt.Println("Slice is not nil")
    }
}

map

package main

import "fmt"

func main() {
    var m map[string]int

    if m == nil {
        fmt.Println("Map is nil")
    } else {
        fmt.Println("Map is not nil")
    }
}

interface

package main

import "fmt"

func main() {
    var i interface{}

    if i == nil {
        fmt.Println("Interface is nil")
    } else {
        fmt.Println("Interface is not nil")
    }
}

总结:

nil就是一个空的类型,针对不同的数据结构,没有值时都可以理解为nil。

掌握知识的最好方式就是教会别人,每篇文章都讲清楚一个知识点,欢迎留言我一起讨论。


原文地址:https://blog.csdn.net/qq_42476938/article/details/143571563

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!