1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package main
import ( "fmt" "reflect" "unsafe" )
func main() { sliceCase() }
func sliceCase() { var list []int fmt.Printf("list 变量地址:%p, list 变量值:%p\n", &list, list)
list = make([]int, 0, 10) fmt.Printf("list 变量地址:%p, list 变量值:%p\n", &list, list)
sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&list)) fmt.Printf("list 变量地址:%p, list 长度:%v,容量:%v\n", unsafe.Pointer(sliceHeader.Data), sliceHeader.Len, sliceHeader.Cap)
list = append(list, 1, 2, 3, 4, 5, 6, 7, 8, 9) fmt.Printf("list 变量地址:%p, list 变量值:%p, list 长度:%v,容量:%v\n", &list, list, len(list), cap(list))
list = append(list, 10, 11) fmt.Printf("list 变量地址:%p, list 变量值:%p, list 长度:%v,容量:%v\n", &list, list, len(list), cap(list))
list1 := list[0:5] fmt.Printf("list1 变量地址:%p, list1 变量值:%p, list1 长度:%v,容量:%v\n", &list1, list1, len(list1), cap(list1))
list2 := list[5:10] fmt.Println(list2) fmt.Printf("list2 变量地址:%p, list2 变量值:%p, list2 长度:%v,容量:%v\n", &list2, list2, len(list2), cap(list2))
f1(list2) fmt.Println(list2) fmt.Printf("list2 变量地址:%p, list2 变量值:%p, list2 长度:%v,容量:%v\n", &list2, list2, len(list2), cap(list2))
}
func f1(list []int) { fmt.Printf("list-ex 变量地址:%p, list-ex 变量值:%p, list 长度:%v,容量:%v\n", &list, list, len(list), cap(list)) list[2] = 17 list = append(list, 21, 22) fmt.Printf("list-ex 变量地址:%p, list-ex 变量值:%p, list 长度:%v,容量:%v\n", &list, list, len(list), cap(list)) }
|