File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -281,8 +281,7 @@ go func() {
281281```
282282
283283### 如何避免 Go 语言中的 Goroutine Leak(协程泄漏)
284-
285- Goroutine 被创建后,由于某些原因无法正常退出,导致它一直存活,占用资源。泄漏的 Goroutine 不会被 GC(垃圾回收)自动回收,因为它们仍然在运行或被其他对象引用。
284+ 指 Goroutine 启动后永远无法退出,导致内存和资源持续占用。
286285#### 原因
2872861 . goroutine由于channel的读/写端退出而一直阻塞,导致goroutine一直占用资源,而无法退出
2882872 . goroutine进入死循环中,导致资源一直无法释放
Original file line number Diff line number Diff line change @@ -335,11 +335,11 @@ go env -w GONOSUMDB="git.xxx.cn"
335335
336336# ## 堆还是栈?
337337
338- | 特性 | 栈 | 堆 |
339- | ------------| ---------------------------- | -------------------------------- |
340- | ** 分配速度** | 极快(纳秒级) | 较慢(微秒级) |
341- | ** 生命周期** | 函数结束时自动释放 | 由GC管理(延迟释放) |
342- | ** 适用场景** | 小对象、未逃逸的局部变量 | 大对象、跨作用域引用的变量 |
338+ | 特性 | 栈 | 堆 |
339+ | ------------ | ------------------------ | -------------------------- |
340+ | ** 分配速度** | 极快(纳秒级) | 较慢(微秒级) |
341+ | ** 生命周期** | 函数结束时自动释放 | 由GC管理(延迟释放) |
342+ | ** 适用场景** | 小对象、未逃逸的局部变量 | 大对象、跨作用域引用的变量 |
343343
344344
345345` ` ` go
@@ -365,3 +365,20 @@ go build -gcflags='-m' . 2>&1 //查看
365365 client := &http.Client{Transport:tr}
366366` ` `
367367
368+ # ## 切片浅拷贝
369+ ` ` ` go
370+ // 1.copy方法
371+ a := []int{1, 2, 3, 4}
372+ b := make([]int, len(a)) // 创建等长新切片
373+ copy(b, a) // 全量复制元素到新切片
374+ // 2.append方法,涉及到扩容
375+ b := append([]int(nil), a...) // 将元素追加到新切片
376+ // 3.遍历
377+ ` ` `
378+
379+ # ## 切片深拷贝
380+ 1. 结构明确,手动递归
381+ 2. JSON 序列化,但效率较低,gob效率高点
382+ 3. 使用第三方库,github.com/jinzhu/copier
383+
384+
You can’t perform that action at this time.
0 commit comments