Cách sử dụng unsfae để lấy độ dài của slice và map
Lấy độ dài của slice
Từ bài viết trước về slice, chúng ta đã biết cấu trúc của slice header:
Khi tạo một slice bằng cách gọi hàm make, thực tế là gọi hàm makeslice, nó trả về một slice:
Vì vậy, chúng ta có thể chuyển đổi giữa unsafe.Pointer và uintptr để lấy các giá trị của slice.
Quá trình chuyển đổi Len và cap như sau:
Lấy độ dài của map
Tiếp tục xem lại map từ bài viết trước:
Khác với slice, hàm makemap trả về con trỏ của hmap, chú ý rằng đây là con trỏ:
Chúng ta vẫn có thể chuyển đổi giữa unsafe.Pointer và uintptr để lấy các giá trị của hmap, chỉ khác là count trở thành con trỏ cấp hai:
Quá trình chuyển đổi count như sau: