Go的数据类型

1.map

map 是 key-value 数据类型数组

	maps := make(map[string]string,10)

	maps["hero1"] = "张三"
	maps["hero2"] = "李四"
	maps["hero3"] = "王五" 

 1) map 再使用前必定要make协程

 2) map 的key 是不能重复的,若是重复了,则会覆盖前的的keyblog

 3) map 的 value 是能够相同的string

 4) map 的key-value 是无序的class

2.数组

数组是存放多个同一类型的数据,数组也是一种数据类型,在Go中,数组的值类型map

        //定义一个存放10个string类型的数组
	var arr [10] string
	arr[0] = "你好"
	arr[1] = "真好"

	//定义一个存放5个string类型的数组
	var arr2 [5] string
	arr2[0] = "你好"
	arr2[1] = "真好"

	//快速声明数组
	arrString := [...]string{
		"1",
		"2",
		"3",
	}

  

  1) [10] string 和 [5] string 都是string的类型的数组,即便都是存放string类型,可是存放的个数不同,就不是同一数据类型,Go语言是严格区分数据类型的数据类型

  2) 数组是经过下标的访问的,下标从0开始引用

3.slice (切片)

slice能够理解成动态数组,容量的能够动态变化的,也就是存放的个数不限制channel

 

	//快速声明数组
	arrString := [...]string{
		"1",
		"2",
		"3",
	}
	fmt.Printf("type:%T,value:%v\n",arrString,arrString)

	//slice的声明方式一,直接从数组里面切出来
	sliceByArray := arrString[0:]
	fmt.Printf("type:%T\n", sliceByArray)


	//slice的声明方式二,经过make
	sliceByMake := make([]string,10)
	sliceByMake[0] = "啦啦啦"
	sliceByMake[1] = "阿拉蕾"
	fmt.Printf("type:%T,value:%v\n",sliceByMake,sliceByMake)


	//slice的声明方式三,定义个切片
	slices := []string{
		"嗯哼",
		"是的",
	}
	fmt.Printf("type:%T,value:%v\n",slices,slices)

  1) slice也是经过下标去访问数据

4.struct (结构体)

//定义一个struct
type Person struct {
	Name string
	Age int
}

  1) struct 其实就是OOP里面的类,至关于Java里面的Class

5.channel (管道)

 channel 是引用类型,必须初始化以后才能使用,也就是要make一下

	//建立一个channel 存放string类型的数据
	channel := make(chan string,10)

	//往channel 里面存数据
	//注意,存数据的时候,若是超出容量的话,是会保存的,要考虑好管道里面数据的流动,便是有进有出
	channel <- "你好吖"

	//从channel 里面取数据
	<- channel

	fmt.Printf("channel len:%v ; cap=%v \n",len(channel),cap(channel))

  1) channel 里面存放指定的数据类型

  2) channel 的数据放满后,就不能再继续存放了,只有从里面取出数据,才能再存放数据了

  3) 在没有使用协程的状况下,若是channel 数据取完了,再取,就会报 dead lock (死锁)

相关文章
相关标签/搜索