Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var s1 []int // nil slice
- s2 := []int{} // non-nil, empty slice
- s3 := make([]int, 0) // non-nil, empty slice
- fmt.Println("s1", len(s1), cap(s1), s1 == nil, s1[:], s1[:] == nil)
- fmt.Println("s2", len(s2), cap(s2), s2 == nil, s2[:], s2[:] == nil)
- fmt.Println("s3", len(s3), cap(s3), s3 == nil, s3[:], s3[:] == nil)
- for range s1 {}
- for range s2 {}
- for range s3 {}
- s1 0 0 true [] true
- s2 0 0 false [] false
- s3 0 0 false [] false
- s := make([]int, 0, 100)
- fmt.Println("Empty:", len(s) == 0, ", but capacity:", cap(s))
- Empty: true , but capacity: 100
- type SliceHeader struct {
- Data uintptr
- Len int
- Cap int
- }
- var s1 []int
- s2 := []int{}
- s3 := make([]int, 0)
- fmt.Printf("s1 (addr: %p): %+8vn",
- &s1, *(*reflect.SliceHeader)(unsafe.Pointer(&s1)))
- fmt.Printf("s2 (addr: %p): %+8vn",
- &s2, *(*reflect.SliceHeader)(unsafe.Pointer(&s2)))
- fmt.Printf("s3 (addr: %p): %+8vn",
- &s3, *(*reflect.SliceHeader)(unsafe.Pointer(&s3)))
- s1 (addr: 0x1040a130): {Data: 0 Len: 0 Cap: 0}
- s2 (addr: 0x1040a140): {Data: 1535812 Len: 0 Cap: 0}
- s3 (addr: 0x1040a150): {Data: 1535812 Len: 0 Cap: 0}
- var n []int
- n == nil // true
- var n []int
- len(n) == cap(n) == 0 // true
- n = append(n, 123)
- len(n) == 1 // true
Add Comment
Please, Sign In to add comment