package main import ( "fmt" ) func main() { //基本数据类型(默认值) //如果是java,报错,变量未初始化 var a int fmt.Println(a) //0 a = 100 fmt.Println(a) //100 //数组(零) //数组是数据结构 var arr [5]int fmt.Println(arr) //[0 0 0 0 0] arr[0] = 1000 fmt.Println(arr) //[1000 0 0 0 0] //切片(空) //切片是数据结构 var slice []int fmt.Println(slice) //[] //没有初始化,它也是有底层数组的 //slice[0] = 100 //runtime error: index out of range [0] with length 0 fmt.Println(slice) slice = []int{1, 2, 3, 4, 5} fmt.Println(slice) //[1 2 3 4 5] //结构体(默认值) type Student struct{ Name string Age int } var s Student fmt.Println("s-->", s) //s--> { 0} //map(nil) var map1 map[int]int fmt.Println(map1) //map[] //map1[10] = 100 //panic: assignment to entry in nil map //fmt.Println(map1) map2 := make(map[int]int) fmt.Println(map2) //map[] map2[100] = 1000 fmt.Println(map2) //map[100:1000] i, ok := map2[100] //这个OK也可以不写 fmt.Println(i, ok) //管道(nil) var c chan int fmt.Println(c) //<nil> c2 := make(chan int) fmt.Println(c2) //0xc000054060 go func() { //不能写在写数据的下面,会发生deadlock,必须有先有消费者,才有生产者 for n := 0; n < 10; n++ { //i := <-c2 //fmt.Println(i) v, ok := <-c2 //OK可以不写 fmt.Println(v, ok) } }() for n := 0; n < 10; n++ { c2 <- n } }
package main import "fmt" func main() { // 不初始化为nil的 // 引用类型,初始化才能使用 // make用于给引用类型分配空间,slice map chan // 1. 空接口类型 type a interface{} var i a // 不知道是什么类型实现的空接口,所以是nil fmt.Println(i) // <nil> // 2. 指针 var p *int // 只分配了p的空间,并没有分配到存数据的地址,所以是nil fmt.Println(p) // <nil> // 2.1 slice // 有底层数组,长度为0 var s []int fmt.Println(s) s = append(s, 10) fmt.Println(s) // [10] // 长度为0的数组 var aa [0]int fmt.Println("-->", aa) fmt.Println(len(aa)) // 0 fmt.Printf("%T ", aa) // [0]int // 3. map var m map[int]int // map[int]int 引用类型,没有分配存数据的地址,所以是nil fmt.Println(m) // map[] //m[10] = 100 // assignment to entry in nil map // 4. chan var c chan int // chan int 引用类型,没有分配存数据的地址,所以是nil fmt.Println(c) // <nil> }