删除一段元素

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{}
}

经过测试应该是第一种方法的效率比较高,原因应该是没有多次分配内存。

总结

虽然上面总结了几种删除元素的方法,但是个人认为都不是很好,尤其是删除一段元素的方法,如果大家有更好的方法,请在评论中提醒我。