小编Sam*_*dra的帖子

Golang Slice中的内存泄漏

我刚刚开始学习go,在经历切片技巧时,有两点非常令人困惑。谁能帮我澄清一下。

在给定的切片中切割元素

方法1:

a = append(a[:i], a[j:]...)
Run Code Online (Sandbox Code Playgroud)

但是有一点需要注意的是,如果使用指针并且推荐的方法可能会导致内存泄漏

方法二:

copy(a[i:], a[j:])
for k, n := len(a)-j+i, len(a); k < n; k++ {
    a[k] = nil // or the zero value of T
}
a = a[:len(a)-j+i]
Run Code Online (Sandbox Code Playgroud)

谁能帮助我了解内存泄漏是如何发生的。我知道子切片将由主数组支持。我的想法与指针无关,我们是否必须始终遵循方法2。

@icza和@Volker回答后更新。

假设您有一个结构

type Books struct {
    title   string
    author  string
}

var Book1 Books
var Book2 Books 

    /* book 1 specification */
    Book1.title = "Go Programming"
    Book1.author = "Mahesh Kumar"

    Book2.title = "Go Programming"
    Book2.author = "Mahesh Kumar"

    var bkSlice = []Books{Book1, Book2} …
Run Code Online (Sandbox Code Playgroud)

pointers copy append go slice

4
推荐指数
1
解决办法
880
查看次数

标签 统计

append ×1

copy ×1

go ×1

pointers ×1

slice ×1