go语言学习笔记(7) 类型-复合类型
来源:互联网 发布:手绘地图软件 编辑:程序博客网 时间:2024/06/06 19:52
复合类型
pointer
array
slice(切片)
map(字典)
chan(通道)
struct
interface
对于元素是简单类型的array, slice, map等
都可以直接用fmt.Println直接进行打印输出所有元素
array
类型: [n][m]...元素类型
[12] byte [23]*int [12]struct{x, y int}
[12][23]int=== [12]([23]int),二维数组长度12,一维数组长度23
同C的: int arr[12][23];
数组长度
1、数组长度必须是常量、常量表达式,即编译期已知
2、数组长度是数组类型的内置常量,len函数可以获取: len(arr)
元素访问
1、下标访问,arr[i][j]
2、关键字range
range返回两个参数: 数组下标 数组元素
for i, v := range arr{...}
3、打印数组
1)、遍历数组,分别打印数组元素
2)、fmt.Println(arr),直接打印数组所有元素
数组赋值
1、遍历赋值
2、声明时,一起赋值
var narr [3][4]int =[3][4]int{{1, 2, 3, 4}, {11, 12, 13, 14}, {21, 22, 23, 24}}
var narr [3][4]int = [3][4]int{{1, 2, 3, 4}, {11, 12, 13, 14}}
var narr [3][4]int = [3][4]int{{1, 2, 3}, {11, 12, 13, }}
var narr []int = []int{1, 2, 3, 4} //先定义一个匿名数组。然后赋值给narr
1)、未赋值的元素,初始化为0
2)、赋值长度大于数组长度时,编译报错
1、数组是一个值类型,不同于C(修改数组实参的值,需要用到数组切片,即slice)
值类型:在赋值和参数传递时,进行复制
slice
数组切片,类似指向数组的指针,实际有自己的数据结构
数据结构:
1、指向原生数组的指针
2、数组切片中的元素个数
3、数组切片已分配的存储空间
创建数组切片
1、基于数组
var sl []int = narr[first:last]
1)、取值范围下标[first, last)
2)、first、last可省略:分别表示从开头、到最后
2、基于数组切片
基本同基于数组的情况
last可以是数组切片的容量,即可大于数组切片的大小
3、直接创建
sl := make([]int, 5) //创建5个元素的数组切片
sl := make([]int, 5, 10) //创建5个元素的数组切片,但总共分配10个元素的空间
sl := []int{1, 2, 3, 4, 5}
数组切片的大小与容量
len(sl): 获取大小,同数组
cap(sl): 获取容量,数组切片的容量和大小可以不同
当数组切片的容量不够时,会自动扩展空间,可能涉及到数据的复制
元素访问
同数组
追加元素
sl = append(sl, 1, 2, 3) //创建一个新的数组切片,元素依次为sl的所有元素,1,2,3
返回新创建的数组切片
sl = append(sl, sl2...) //创建一个新的数组切片,元素依次为sl,sl2的所有元素
返回新创建的数组切片
sl2...:将sl2内的元素全部导出,然后附加到参数表
元素复制
1、直接相互赋值,会完全替换
sl = sl2
2、copy函数
copy(sl, sl2) //复制sl2的元素到sl,复制的大小取决于两个数组切片的长度较小的一方
map
类型: map[KeyType] ValueType
声明变量后,还需要创建map,才能使用map型的变量
声明map型变量
var map1 map[int] string
创建map
map1 = make(map[int] string)
map1 = make(map[int] string, 10) //创建时,指定容量
map1 = map[int] string{ //创建时,进行赋值
1 : "sun",
2 : "wang",//这里的逗号必须有,否则报语法错误
} //如果写成一行代码,最后这个元素的后面的逗号可有可无
//如果多行写,这个逗号必须有
//同样适用于其他复合类型
map2 := make(map[int] string){ //创建时,进行赋值
1 : "sun",
2 : "wang",
}
元素赋值
map1[3] = "li"
元素删除
delete(map1, 3)
元素查找
v, b = map1[3]
v: 3对应的值
b: bool类型,是否找到对应的键值对
阅读全文
0 0
- go语言学习笔记(7) 类型-复合类型
- C语言学习笔记(4)类型转化,复合类型
- go语言学习-类型
- go语言学习笔记(6) 类型-基础类型
- C++学习笔记:复合类型
- C语言学习笔记(五)——复合类型
- go语言学习-类型&整形
- Go语言中的复合类型及面向对象思想
- Go语言学习笔记--类型、指针、面向对象
- Go语言学习笔记(二) [变量、类型、关键字]
- 四、golang类型讲解--go语言学习笔记
- Go语言学习笔记 -- 变量、类型和关键字
- Go语言学习笔记(五)-其他类型(指针、结构体、、)
- c++学习笔记(1)复合类型
- c++primer学习笔记-----2.3复合类型
- Go语言学习笔记 --- 常量、变量、批量定义与声明、数据类型、类型别名、类型转换
- 复合类型学习总结
- Go语言学习5:Go语言的变量类型
- YOLO模型训练可视化训练过程中的中间参数
- 编译代码环境配置
- MyBatis使用入门
- Tesseract-OCR学习系列(四)API
- Mac上Safari浏览器字体变细问题
- go语言学习笔记(7) 类型-复合类型
- 随机数与给定随机数生成器[0,m)产生另一个随机数生成器[0, n)(均匀分布)
- media server died的解决方法
- hbase的架构及设计
- 安卓微信15。。。。。。。。。。。。。。。问题
- 面向对象-this和静态
- Android资源收集(持续更新)
- 在数据库实例中查询v$asm相关视图的问题
- 写一个脚本checkipadd.sh,判断所输入的参数是否为正确的IP地址,如 果是就输出"This is ip address";如果不是就输出"This is not ip address" (1