GO复合数据类型专题测试
考察知识点
1. 数组(Array)
- 数组定义:固定长度、同类型元素集合
- 定义语法:
[N]type{元素}、[...]type{元素}自动推断长度 - 数组特点:长度是类型组成部分、值类型、拷贝传递
- 数组操作:索引访问、遍历、初始化
2. 切片(Slice)
- 切片定义:动态长度、引用类型、底层指向数组
- 创建方式:
make([]type, len, cap)、从数组/切片截取、直接初始化 - len与cap:len是元素数量、cap是容量、扩容机制
- 切片操作:append追加、copy拷贝、截取子切片
- nil切片:未初始化切片为nil、len=0、cap=0
3. 结构体(Struct)
- 结构体定义:使用struct关键字、字段集合
- 字段定义:字段名+类型、可嵌套结构体
- 结构体初始化:字段顺序初始化、字段名初始化、new函数
- 方法绑定:值接收者、指针接收者、方法调用规则
- 结构体嵌入:匿名字段、继承嵌入类型方法
4. 映射(Map)
- map定义:键值对集合、引用类型
- 创建方式:
make(map[key]value)、直接初始化map[key]value{} - map操作:添加、删除、获取、检查键存在、遍历、长度
- map特点:无序、键必须可比较、引用类型
- nil map:未初始化map为nil、读取返回零值、写入panic
5. 复合类型组合使用
- 切片元素为结构体:
[]structName{} - 结构体字段为切片:
struct { field []int } - 结构体字段为map:
struct { field map[string]int } - map值为结构体:
map[key]structName{} - map值为切片:
map[key][]int{} - 嵌套初始化:多层复合字面量
6. 值类型与引用类型
- 值类型:数组、结构体、拷贝传递、修改不影响原值
- 引用类型:切片、map、传递引用、修改影响原值
- 函数参数:值类型拷贝、引用类型共享底层数据
- 深拷贝vs浅拷贝:copy函数实现切片深拷贝
7. make与new
- make函数:创建切片、map、channel、返回初始化后的值
- new函数:创建类型实例、返回指针、零值初始化
- 适用场景:make用于引用类型、new用于值类型获取指针
8. 复合数据类型最佳实践
- 切片预分配:已知容量时使用make预分配减少扩容
- map容量预估:指定容量减少扩容开销
- 结构体字段顺序:内存对齐优化
- 值接收者vs指针接收者:大结构体用指针、小结构体用值
- 避免nil map写入:初始化后再操作
Go语言中定义数组的语法是?
Go数组是固定长度的,长度是数组类型的一部分,[3]int和[4]int是不同的类型。
Go数组定义时长度必须 ______ 或使用 ______ 自动推断。可以使用 ______ 初始化元素,未指定的元素自动设为 ______。数组长度用 ______ 函数获取。
Go语言中定义切片的正确方式是?
Go切片的len(长度)表示当前元素数量,cap(容量)表示底层数组可容纳的最大元素数量。
Go切片使用 ______ 函数追加元素,使用 ______ 获取长度,使用 ______ 获取容量。切片表达式 ____________ 取从start到 ______ 的元素。超出容量时append会 ________。
Go语言中定义map的正确语法是?
Go中未初始化的map(nil map)可以直接添加元素。
Go map使用 ______ 访问元素,使用 ______________ 添加或修改元素,使用 ______ 函数删除元素。检查元素是否存在使用 ______________,ok为 ______ 表示存在, ______ 表示不存在。
Go语言中定义结构体使用哪个关键字?
Go结构体创建时,未初始化的字段会自动设置为对应类型的零值。
Go结构体使用 ______ 访问字段,语法 ___________。可以使用 ______ 访问结构体,Go会 ______ 解引用。匿名字段可以实现 ______ 效果,直接访问嵌入结构体的字段。
Go map的常见操作包括?
Go创建结构体实例的方式包括?
Go结构体可以定义方法,方法可以绑定到结构体或结构体指针。
Go数组初始化的正确语法包括?
Go中数组与切片的区别包括?
切片是基于 ______ 的引用类型,包含三个信息: ______ 指向底层数组、 ______ 当前长度、 ______ 容量。切片表达式 _____________ 可以从数组创建切片。append超过容量会 ________ 底层数组。
Go map的键可以是任何类型,包括切片、map和函数。
Go结构体可以包含 ______、 ______、 ______ 等复合类型字段。包含 ______ 字段时必须 ______ 才能使用,包含 ______ 字段时可以直接 ______ 因为nil切片可以追加。
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验