गो में एक स्लाइस को साफ करने का उपयुक्त तरीका क्या है?
यहाँ मैंने जाने के मंचों में क्या पाया है :
// 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))
}
क्या ये सही है?
स्पष्ट करने के लिए, बफर को साफ किया जाता है ताकि इसे पुन: उपयोग किया जा सके।
एक उदाहरण बाइट्स पैकेज में बफ़ररुनेट फ़ंक्शन है।
ध्यान दें कि रीसेट केवल 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) }