首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Go 中的 = 和 := 有什么区别?
Go 中的指针的意义是什么?
Go 多值返回有什么用?
Go 有异常类型吗?
Go 中的 rune 和 byte 有什么区别?
Go 语言中的深拷贝和浅拷贝?
什么叫字面量和组合字面量?
对象选择器自动解引用怎么用?
map 的值不可寻址,那如何修改值的属性?
有类型常量和无类型常量的区别?
为什么传参使用切片而不使用数组?
Go 语言中 hot path 有什么用呢?
引用类型与指针,有什么不同?
Go 是值传递,还是引用传递、指针传递?
Go中哪些是可寻址,哪些是不可寻址的?
slice 扩容后容量及内存如何计算?
goroutine 存在的意义是什么?
说说 Go 中闭包的底层原理?
defer 的变量快照什么情况会失效?
说说你对 Go 里的抢占式调度的理解。
简述一下 Go 栈空间的扩容/缩容过程?
说一下 GMP 模型的原理。
GMP 模型为什么要有 P ?
不分配内存的指针类型能用吗?
如何让在强制转换类型时不发生内存拷贝?
Go 中的 GC 演变是怎样的?
Go 中哪些动作会触发 runtime 调度?
有哪些情况会导致协程泄露?
局部变量分配在栈上还是堆上?
为什么常量、字符串和字典不可寻址?
为什么 slice 元素是可寻址的?
Go 的默认栈大小是多少?最大值多少?
Go 中的分段栈和连续栈的区别?
内存对齐、内存布局是怎么回事?
Go 里是怎么比较相等与否?
所有的 T 类型都有 *T 类型吗?
数组对比切片有哪些优势?
GMP 偷取 G 为什么不需要加锁?
堆引用栈内存是怎么回收的?
当前位置:
首页>>
技术小册>>
GO面试指南
小册名称:GO面试指南
数组和切片是 Go 中常用的两种数据结构,它们都可以用来存储一组数据。数组和切片的主要区别在于长度和内存管理。 数组的长度是固定的,一旦创建,长度就不能改变。而切片是一个可变长度的序列,可以动态增加或缩小。 另外,数组的底层存储是在栈上的,而切片的底层存储是在堆上的,因此切片需要进行内存分配和垃圾回收,而数组不需要。 数组的另一个优势在于它是值类型,可以通过赋值操作来复制一个数组。而切片是引用类型,复制一个切片只是复制了指向底层数组的指针,而不是复制了整个底层数组。 以下是一个示例代码,演示了数组和切片的用法和区别: ``` package main import "fmt" func main() { // 定义一个长度为5的数组 arr := [5]int{1, 2, 3, 4, 5} // 定义一个切片,初始为空,长度为0 slice := []int{} // 输出数组和切片 fmt.Println("Array:", arr) fmt.Println("Slice:", slice) // 修改数组的第一个元素 arr[0] = 10 // 向切片中添加元素 slice = append(slice, 1) // 输出修改后的数组和切片 fmt.Println("Array:", arr) fmt.Println("Slice:", slice) } ``` 在这个例子中,我们定义了一个长度为 5 的数组 arr 和一个初始为空的切片 slice。然后,我们分别向数组和切片中添加了一个元素,并输出了它们的值。需要注意的是,向数组中添加元素是不允许的,因为数组的长度是固定的。而向切片中添加元素是通过 append 函数实现的,它会返回一个新的切片。 此外,我们还演示了数组是值类型,修改一个数组不会影响其他数组,而切片是引用类型,修改一个切片会影响其他指向同一个底层数组的切片。
上一篇:
所有的 T 类型都有 *T 类型吗?
下一篇:
GMP 偷取 G 为什么不需要加锁?
该分类下的相关小册推荐:
Go语言入门实战经典
go编程权威指南(三)
从零写一个基于go语言的Web框架
Go语言从入门到实战
深入解析go语言
Golang修炼指南
go编程权威指南(一)
深入浅出Go语言核心编程(七)
深入浅出Go语言核心编程(四)
深入浅出Go语言核心编程(二)
Golang并发编程实战
Go Web编程(上)