From 418c5178459985a682c4dbbd28135f1585e0fd8e Mon Sep 17 00:00:00 2001 From: Alex Nguyen Date: Wed, 26 Jun 2019 18:42:49 +0700 Subject: [PATCH 1/2] Fix example convert string ch2-03 --- ch2-cgo/ch2-03-cgo-types.md | 40 ++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 18 deletions(-) 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]) } ``` From f4a576cb460ba8c52140c3b3eceae9f4c40560bd Mon Sep 17 00:00:00 2001 From: Alex Nguyen Date: Wed, 26 Jun 2019 18:45:19 +0700 Subject: [PATCH 2/2] Update ch2-03-cgo-types.md --- ch2-cgo/ch2-03-cgo-types.md | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/ch2-cgo/ch2-03-cgo-types.md b/ch2-cgo/ch2-03-cgo-types.md index de3f140..3380fb3 100644 --- a/ch2-cgo/ch2-03-cgo-types.md +++ b/ch2-cgo/ch2-03-cgo-types.md @@ -328,30 +328,27 @@ char *s = "Hello"; */ import "C" import ( - "reflect" - "unsafe" - "fmt" + "reflect" + "unsafe" ) - func main() { - // 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 + // 通过 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 slice - arr1 := (*[31]byte)(unsafe.Pointer(&C.arr[0]))[:10:10] + // 通过切片语法转换 + 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)) - 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]) + sLen := int(C.strlen(C.s)) + s1 := string((*[31]byte)(unsafe.Pointer(C.s))[:sLen:sLen]) } ```