您的位置 首页 golang

golang切片使用注意事项

golang中使用切片,底层数组不会被复制,仍然会被切片所引用

 package main
import (
	"fmt"
	"io/ioutil"
)
func main() {
	filename := "/path/to/data.txt"
	data, err := ioutil.ReadFile(filename)
	if nil != err {
		fmt.Println(err.Error())
	}
	ds := data[:64]
	fmt.Println(ds)
}  

在上面的代码中,ds保存了data的前64个字节,ds是data进行切片得到的,如果ds要使用,那么data会继续在内存中,不会被GC回收,如果data数据量特别大,对内存造成的压力就比较大。

解决的方法是将结果克隆一份,这样可以释放底层的数组

 package main
import (
	"fmt"
	"io/ioutil"
)
func main() {
	filename := "/path/to/data.txt"
	data, err := ioutil.ReadFile(filename)
	if nil != err {
		fmt.Println(err.Error())
	}
	ds := append([]byte{}, data[:64]...)
	fmt.Println(ds)
}  

文章来源:智云一二三科技

文章标题:golang切片使用注意事项

文章地址:https://www.zhihuclub.com/99120.shtml

关于作者: 智云科技

热门文章

网站地图