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 (死鎖)

相關文章
相關標籤/搜索