删除一段元素
package main
import (
"fmt"
"unsafe"
)
type sliceType struct{
pdata unsafe.Pointer
len int
cap int
}
func main() {
var a []byte = []byte("helloworld\n")
fmt.Println((*sliceType)(unsafe.Pointer(&a)).pdata)
a = append(a[:5], a[6:]...)
fmt.Println((*sliceType)(unsafe.Pointer(&a)).pdata)
}
该方法相当于将删除数据后面的数据一项项依次append到删除项之前的元素上。
指向数据段的地址是没有变化的,且编译出的汇编代码中有memmove的操作,可以判断出,是通过内存操作,修改了数据段的内容。
删除slice中的全部元素
这里我尝试了两种方法,一种是
func fun(){
a := []int{1,2,3,4,5}
a = a[0:0]
}
另一种是
func fun(){
a := []int{1,2,3,4,5}
a = []int{}
}
经过测试应该是第一种方法的效率比较高,原因应该是没有多次分配内存。
总结
虽然上面总结了几种删除元素的方法,但是个人认为都不是很好,尤其是删除一段元素的方法,如果大家有更好的方法,请在评论中提醒我。