go语言的类型定义方式

a. 使用var

	var c1 chan int 
	fmt.Println(c1)        // <nil>

	var c2 map[string]int
	fmt.Println(c2)        // map[]   
	c2[“a”] = 1            // error :panic: assignment to entry in nil map

	var c3 [] int
	fmt.Println(c3)        // []   
	c3[0] = 1              // error :panic: runtime error: index out of range
以上用var初始化三种类型,仅仅是声明,并不能使用


b. 使用 var 或者 :=

	var c2 map[string]int = map[string]int{}
	fmt.Println(c2)        // map[]

	var c3 []int = [] int {1,2,3 }
	var c4 []int = arr[:]

	var a,b ,c = 3, true,"abc"
	fmt.Println(a,b,c)

	a1,b2 ,c3 := 3, true,"abc"
	fmt.Println(a1,b2,c3)
左边都可以换成 c := 

在方法内部可以用:=定义一个变量,但是在方法外部不能,只能使用”var s =1” ,在方法外部的每一行都需要关键字,比如var ,func等
不管方法内还是方法外,多个变量声明时都可以使用:

var (
	a =1
	b =2
	c =3
)

c. make

  • 创建切片
s = make([] int ,10 )

  • 创建map
m = make(map[string]int)
  •  创建管道
c = make(chan int )
创建:
	t1 := make([] int ,10)
	fmt.Println(t1)        // [0 0 0 0 0 0 0 0 0 0]
	t3 := make(chan int)
	fmt.Println(t3)        // 0xc42007a060
	t4 := make(map[string]int)
	fmt.Println(t4)        // map[]
组合:

	t6 := make([]map[string]int ,5)
	fmt.Println(t6)          // [map[] map[] map[] map[] map[]]
	//t6[0]["a"] = 1         // error panic: assignment to entry in nil map
	t6[0] = make(map[string]int)
	t6[0]["a"] = 1
	fmt.Println(t6)         //[map[a:1] map[] map[] map[] map[]]

	t5 := make([] chan int ,5)
	fmt.Println(t5)       // [<nil> <nil> <nil> <nil> <nil>]

	t7 := make([] User ,5)
	fmt.Println(t7)         // [{ 0 0 } { 0 0 } { 0 0 } { 0 0 } { 0 0 }]
	t7[0].Age = 1
	fmt.Println(t7)         // [{ 1 0 } { 0 0 } { 0 0 } { 0 0 } { 0 0 }]
可见,map和chan的类型切片,里面的每个元素是不能直接用的,因为是nil,使用的时候必须对每个元素进行再次make
但是结构体的切片中,每个元素是可以直接用的
func main() {
	s := make([]int, 5)
	s = append(s, 1, 2, 3)
	fmt.Println(s)         // [0 0 0 0 0 1 2 3] ,而不是[1 2 3]
}
make初始化是由默认值的哦,此处默认值为0


猜你喜欢

转载自blog.csdn.net/zengchen73/article/details/80905884