diff --git a/ch2-cgo/ch2-03-cgo-types.md b/ch2-cgo/ch2-03-cgo-types.md index ab5a188..de3f140 100644 --- a/ch2-cgo/ch2-03-cgo-types.md +++ b/ch2-cgo/ch2-03-cgo-types.md @@ -322,32 +322,36 @@ type SliceHeader struct { ```go /* -static char arr[10]; -static char *s = "Hello"; +#include +char arr[10]; +char *s = "Hello"; */ import "C" import ( - "reflect" - "unsafe" + "reflect" + "unsafe" + "fmt" ) + func main() { - // 通过 reflect.SliceHeader 转换 - var arr0 []byte - var arr0Hdr = (*reflect.SliceHeader)(unsafe.Pointer(&arr0)) - arr0Hdr.Data = uintptr(unsafe.Pointer(&C.arr[0])) - arr0Hdr.Len = 10 - arr0Hdr.Cap = 10 + // chuyển đổi bằng reflect.SliceHeader + var arr0 []byte + var arr0Hdr = (*reflect.SliceHeader)(unsafe.Pointer(&arr0)) + arr0Hdr.Data = uintptr(unsafe.Pointer(&C.arr[0])) + arr0Hdr.Len = 10 + arr0Hdr.Cap = 10 - // 通过切片语法转换 - arr1 := (*[31]byte)(unsafe.Pointer(&C.arr[0]))[:10:10] + // chuyển đổi slice + arr1 := (*[31]byte)(unsafe.Pointer(&C.arr[0]))[:10:10] - var s0 string - var s0Hdr = (*reflect.StringHeader)(unsafe.Pointer(&s0)) - s0Hdr.Data = uintptr(unsafe.Pointer(C.s)) - s0Hdr.Len = int(C.strlen(C.s)) - sLen := int(C.strlen(C.s)) - s1 := string((*[31]byte)(unsafe.Pointer(&C.s[0]))[:sLen:sLen]) + var s0 string + var s0Hdr = (*reflect.StringHeader)(unsafe.Pointer(&s0)) + s0Hdr.Data = uintptr(unsafe.Pointer(C.s)) + s0Hdr.Len = int(C.strlen(C.s)) + + sLen := int(C.strlen(C.s)) + s1 := string((*[31]byte)(unsafe.Pointer(C.s))[:sLen:sLen]) } ```