• 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>
  • 相关阅读:
    Linix的mysql操作
    Linix安装Mongo
    什么是GitHub
    PHP date, strtotime, mktime处理
    正则表达式及使用
    JavaScript的算法和流程控制总结
    JavaScript的DOM编程总结
    Yii中使用的简单方法
    Mongo数据库的导入导出及使用
    linux-0.11内核 任务的堆栈切换
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16071132.html
Copyright © 2020-2023  润新知