概述
内置数据结构是一门语言的核心基石之一,了解了基本语法,内置数据结构,便可以胜任简单的开发。golang内置的数据结构比较少,有整形,浮点型,字符串,数组,切片(slice),map这几种。
内置数据结构
整形
整形是指整数数据,golang支持有符号整型int,无符号整型uint。
var a int //位数取决于机器 var a int16 //16位有符号整型 var a int32 //32位有符号整型 var a int64 //64位有符号整型 var a uint16 //16位有符号整型 var a uint32 //32位有符号整型 var a uint64 //64位无符号整型 复制代码
字符串
var str string = "test" // 定义内容为"test"的字符串str 复制代码
数组
单个元素的表达有限,比如我们要定义10个整数,不需要写10行。 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。
var iAry = [10]int{1,2,3,4,5,6,7,8,9,10} var strAry = [10]string{"aa", "bb", "cc", "dd", "ee"} 复制代码
切片
slice是一个引用类型,是一个动态的指向数组切片的指针。 slice是一个不定长的,总是指向底层的数组array的数据结构。
var al []int //创建slice sl := make([]int,10) //创建有10个元素的slice sl := []int{1,2,3} //创建有初始化元素的slice 复制代码
这里说下切片和数组的关系, 切片是针对数组的引用。从具体使用区别上来说:
- 虽然都是值传递,但是切片本身是对数组的引用。所以切片在函数中传递,函数里边的更改,会影响函数外面的切片数据。
- array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的,所以数组不能动态增加,而切片可以。
结论:在实际开发中,通常使用切片,很少直接使用数组的。
map(字典)
golang的map都是hash map,查找的时间复杂度是O(1),也就是说一个集合,如果用切片的方式表达,那么查找一个元素需要遍历。如果能用字典表示,则可以直接索引。
var m map[int]string //declare a map m = make(map[int]string, 0) // init map
有疑问加站长微信联系(非本文作者)