首页
技术小册
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 语言中,赋值操作和传参操作都是默认进行浅拷贝的。浅拷贝会使得目标对象和源对象共享同一块内存空间,如果对目标对象进行修改,会影响到源对象。而深拷贝则会复制一份全新的数据结构,使得目标对象和源对象互相独立,修改目标对象不会影响到源对象。 下面是一个使用浅拷贝的示例: ``` type Person struct { Name string Age int } func main() { p1 := Person{Name: "Alice", Age: 18} p2 := p1 p2.Age = 20 fmt.Println(p1) // 输出 {Alice 20} } ``` 在上面的示例中,我们定义了一个 Person 结构体,并创建了一个 p1 变量来保存一个 Person 对象。然后,我们将 p1 赋值给 p2 变量,这个赋值操作是浅拷贝。接着,我们修改了 p2 的 Age 属性为 20,然后输出了 p1,发现 Age 属性也被修改了,这说明 p1 和 p2 共享同一块内存空间。 下面是一个使用深拷贝的示例: ``` type Person struct { Name string Age int } func (p Person) Clone() Person { return Person{Name: p.Name, Age: p.Age} } func main() { p1 := Person{Name: "Alice", Age: 18} p2 := p1.Clone() p2.Age = 20 fmt.Println(p1) // 输出 {Alice 18} } ``` 在上面的示例中,我们给 Person 结构体添加了一个 Clone 方法,用于返回一个全新的 Person 对象,这个操作是深拷贝。然后,我们创建了一个 p1 变量来保存一个 Person 对象,接着,我们调用 p1 的 Clone 方法,将返回的新对象赋值给 p2 变量。然后,我们修改了 p2 的 Age 属性为 20,然后输出了 p1,发现 Age 属性没有被修改,这说明 p1 和 p2 互相独立,修改 p2 不会影响到 p1。 Go 语言中赋值操作和传参操作都是默认进行浅拷贝的,如果需要进行深拷贝,可以手动编写相应的函数来实现。
上一篇:
Go 中的 rune 和 byte 有什么区别?
下一篇:
什么叫字面量和组合字面量?
该分类下的相关小册推荐:
Go开发权威指南(上)
WebRTC音视频开发实战
企业级Go应用开发从零开始
Go Web编程(下)
go编程权威指南(四)
深入浅出Go语言核心编程(七)
go编程权威指南(一)
Go语言入门实战经典
Go语言从入门到实战
深入浅出Go语言核心编程(六)
Go Web编程(中)
Golang并发编程实战