func main() { data := []int{1, 2, 3} for i := 0; i < len(data); i++ { ptr := unsafe.Pointer(uintptr(unsafe.Pointer(&data[0])) + uintptr(i)*unsafe.Sizeof(data[0])) fmt.Printf("%d ", *(*int)(unsafe.Pointer(ptr))) } fmt.Printf("\n") str := []string{"a", "b", "c"} for i := 0; i < len(data); i++ { ptr := unsafe.Pointer(uintptr(unsafe.Pointer(&str[0])) + uintptr(i)*unsafe.Sizeof(str[0])) fmt.Printf("%s ", *(*string)(unsafe.Pointer(ptr))) } fmt.Printf("\n") // 利用指针修改下标为1的值 ptr := unsafe.Pointer(uintptr(unsafe.Pointer(&str[0])) + uintptr(1)*unsafe.Sizeof(str[0])) *(*string)(unsafe.Pointer(ptr)) = "d" fmt.Println(str) // 利用指针修改下标为0的值 ptr = unsafe.Pointer(uintptr(unsafe.Pointer(&data[0])) + uintptr(0)*unsafe.Sizeof(data[0])) *(*int)(unsafe.Pointer(ptr)) = 5 fmt.Println(data) }