我刚刚开始学习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)