go类型的默认值,注意pointer, channel, func, interface, map, or slice在没初始化的情况下

nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type.
Type must be a pointer, channel, func, interface, map, or slice type



package main

import "fmt"



func main() {
var slic []string
var m map[string]interface{}
var i interface{}
var ptr *int
var c chan string
var f func()
var s *struct{}
fmt.Println(slic,m,i,ptr,c,f,s)
if slic == nil{
fmt.Println("true")
}
if m == nil{
fmt.Println("true")
}


}
//reset

[] map[] <nil> <nil> <nil> <nil> <nil>
true
true

进程 已完成,退出代码为 0

 

 

 

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>
0x32cae0

posted @ 2021-12-21 09:45  技术颜良  阅读(204)  评论(0编辑  收藏  举报