Go的数据类型

Posted python-boy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go的数据类型相关的知识,希望对你有一定的参考价值。

1.map

map 是 key-value 数据类型

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

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

 1) map 再使用前一定要make

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

 3) map 的 value 是可以相同的

 4) map 的key-value 是无序的

2.数组

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

        //定义一个存放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可以理解成动态数组,容量的可以动态变化的,也就是存放的个数不限制

 

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

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


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


	//slice的声明方式三,定义个切片
	slices := []string{
		"嗯哼",
		"是的",
	}
	fmt.Printf("type:%T,value:%v
",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 
",len(channel),cap(channel))

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

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

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

 

以上是关于Go的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Go 系列教程 —— 17. 方法

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

Go切片实现

从零开始学Go之容器:切片

golang代码片段(摘抄)