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>
// 3. 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\n", aa) // [0]int
// 4. map
var m map[int]int // map[int]int 引用类型,没有分配存数据的地址,所以是nil
fmt.Println(m) // map[]
//m[10] = 100 // assignment to entry in nil map
//5. chan
var c chan int // chan int 引用类型,没有分配存数据的地址,所以是nil
fmt.Println(c) // <nil>
}