go的nil值/零值/空值

https://learnku.com/go/t/46647

package main

import "fmt"

type Tess struct {
s string
i int
}




func main() {

var s Tess //空值 等于 Tess{} { 0}
var ptr *Tess //指针 <nil>
var ss = Tess{} //空值 等于 var s Tess { 0}
var prr = new(Tess) //&{ 0}
var sss = Tess{ // {test 100}
s: "test",
i: 100,
}
var slic []int //nil 值 = [] // nil值
var slicc = make([]int,0) //空值 []
var slicccc= make([]int,5) //零值 [0 0 0 0 0]

fmt.Println(s,ss,sss,ptr,prr)
fmt.Println(slic,slicc,slicccc)

var m map[string]string //map[] //nil值
var mm = make(map[string]string)// map[] 空值
var mmm = map[string]string{"test":"test"} //map[test:test]
var mmmm = map[string]string{} //map[] 空值
fmt.Println(m,mm,mmm,mmmm)
var c chan string
fmt.Println(c) //<nil>
c = make(chan string,1)
   fmt.Println("空值",c)  //空值 0xc0000441e0

c <-"test"
cc:= <- c
fmt.Println(cc) //test
for i :=range cc{
fmt.Println(i)
// 0
// 1
// 2
// 3
}
var f func()   
var ff = func() {
fmt.Println("OK")
}
fmt.Println(f) //nil
fmt.Println(ff) // 0xb3cae0


}
结果:

{ 0} { 0} {test 100} <nil> &{ 0}
[] [] [0 0 0 0 0]
map[] map[] map[test:test] map[]
<nil>
test
0
1
2
3

<nil>
0xfbcae0

 

默认值表

类型默认值
整数 0
浮动 0
复数 0 个实部和 0 个虚部
字节 0
符文 0
字串 “”
布尔 错误
数组 每个数组的值都为其默认值
结构 每个字段均为默认值
地图
频道
界面
切片
指针无  
功能介绍无  

例子:

让我们看一个例子。使用侧面的菜单进行导航。

整数

package main
import "fmt"

func main(){
    var int
    fmt.Print(“ int的默认零值:”)
    fmt.Println(a)

    var b uint
    fmt.Print(“ uint的默认零值:”)
    fmt.Println(b)
}

输出:

int的默认零值:0
uint的默认零值:0

Float

package main
import "fmt"
func main(){
    var a float32
    fmt.Print(“ float的默认零值:”)
    fmt.Println(a)
}

输出:

浮点数的默认零值:0

复数

package main
import "fmt"
func main() {
    var a complex64
    fmt.Print("Default zero value of complex: ")
    fmt.Println(a)
}

输出:

Default zero value of complex: (0+0i)

字节

package main
import "fmt"
func main() {
    var a byte
    fmt.Print("Default zero value of byte: ")
    fmt.Println(a)
}

输出:

Default zero value of byte: 0

Rune

package main
import "fmt"
func main() {
    var a rune
    fmt.Print("Default zero value of rune: ")
    fmt.Println(a)
}

输出:

Default zero value of rune: 0

字符串

package main
import "fmt"
func main() {
    var a string
    fmt.Print("Default zero value of string: ")
    fmt.Println(a)
}

输出:

Default zero value of string:    //An emtpy string. Hence nothing is printed

布尔

package main
import "fmt"
func main() {
    var a bool
    fmt.Print("Default zero value of bool: ")
    fmt.Println(a)
}

输出:

Default zero value of bool: false

数组

数组的默认值是其值的默认值。例如,在下面的代码中,存在两个长度为 bool 的数组。当我们打印时输出为 ** [false false] **

package main
import "fmt"
func main() {
    var a [2]bool
    fmt.Print("Default Zero Value of an array: ")
    fmt.Println(a)
}

输出:

Default Zero Value of a array: [false false]

结构体

** struct 的默认值是其字段的默认值。例如,在下面的代码中,有一个带有两个字段的 struct 示例。一个是 int 类型,另一个是 bool 类型。我们创建此结构的一个实例,并在打印时输出为 {0 false} **

package main
import "fmt"
func main() {
    type sample struct {
        a int
        b bool
    }
    a := sample{}
    fmt.Print("Default Zero Value of an struct: ")
    fmt.Println(a)
}

输出:

Default Zero Value of a struct: {0 false} 

Map

** map 的默认值为nil。 ** 这就是为什么 fmt.Println (a == nil) 的输出为 true 的原因。将地图传递到 ** fmt.Println ** 时,它将尝试在地图中打印值。这就是为什么输出是 map [] 的原因

package main
import "fmt"
func main() {
    var a map[bool]bool
    fmt.Println(a == nil)
    fmt.Print("Printing map: ")
    fmt.Println(a)
}

输出:

true
Printing map: map[]

频道

package main
import "fmt"
func main() {
    var a chan int
    fmt.Print("Default zero value of channel: ")
    fmt.Println(a)
}

输出:

Default zero value of channel:<nil>

接口

package main
import "fmt"
func main() {
    var a chan interface{}
    fmt.Print("Default zero value of interface: ")
    fmt.Println(a)
}

输出:

Default zero value of interface: < nil>

切片

切片的默认值为 ** nil。 这就是为什么 fmt.Println (a == nil) 的输出为 true 的原因。当将切片传递到 ** fmt.Println ** 时,它将尝试打印切片中的值。这就是为什么输出是 []

package main
import "fmt"
func main() {
    var a []int
    fmt.Println(a == nil)
    fmt.Print("Printing slice: ")
    fmt.Println(a)
}

输出:

true
Printing slice: []

函数

package main
import "fmt"
func main() {
    var a func()
    fmt.Print("Default Zero Value of a func: ")
    fmt.Println(a)
}

输出:

Default Zero Value of a func: <nil>

指针

package main
import "fmt"
func main() {
    var a *int
    fmt.Print("Default Zero Value of a pointer: ")
    fmt.Println(a)
}

输出:

Default Zero Value of a pointer: <nil>
posted @ 2022-03-29 12:38  技术颜良  阅读(309)  评论(0编辑  收藏  举报