开发者社区> 问答> 正文

如何在Go中清除切片?

在Go中清除切片的适当方法是什么?

这是我在go论坛中找到的内容:

// test.go package main

import ( "fmt" )

func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = letters[:0] fmt.Println(cap(letters)) fmt.Println(len(letters)) } 它是否正确?

为了明确起见,清除了缓冲区,以便可以重用它。

一个示例是bytes包中的Buffer.Truncate函数。

注意,Reset只是调用Truncate(0)。因此,在这种情况下,似乎第70行将进行评估:b.buf = b.buf [0:0]

http://golang.org/src/pkg/bytes/buffer.go

// Truncate discards all but the first n unread bytes from the buffer. 60 // It panics if n is negative or greater than the length of the buffer. 61 func (b *Buffer) Truncate(n int) { 62 b.lastRead = opInvalid 63 switch { 64 case n < 0 || n > b.Len(): 65 panic("bytes.Buffer: truncation out of range") 66 case n == 0: 67 // Reuse buffer space. 68 b.off = 0 69 } 70 b.buf = b.buf[0 : b.off+n] 71 } 72
73 // Reset resets the buffer so it has no content. 74 // b.Reset() is the same as b.Truncate(0). 75 func (b *Buffer) Reset() { b.Truncate(0) } 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 23:07:21 964 0
1 条回答
写回答
取消 提交回答
  • 这完全取决于您对“透明”的定义。有效的方法之一当然是:

    slice = slice[:0] 但是有一个陷阱。如果切片元素的类型为T:

    var slice []T 然后强制len(slice)为零,由上述“特技”, 不使任何元件

    slice[:cap(slice)]

    2020-02-07 23:07:35
    赞同 展开评论 打赏
问答分类:
Go
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Go语言路上踩过的坑 立即下载
gohbase :HBase go客户端 立即下载
Go构建日请求千亿级微服务实践 立即下载