diff --git a/ch2-cgo/ch2-02-basic.md b/ch2-cgo/ch2-02-basic.md index 5a22007..db0b213 100644 --- a/ch2-cgo/ch2-02-basic.md +++ b/ch2-cgo/ch2-02-basic.md @@ -1,6 +1,6 @@ # 2.2 CGO基础 -要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量`CGO_ENABLED`被设置为1,这表示CGO是被启用的状态。在本地构建时`CGO_ENABLED`默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启`CGO_ENABLED`环境变量。然后通过`import "C"`语句启用CGO特性。 +要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量`CGO_ENABLED`被设置为1,这表示CGO是被启用的状态。在本地构建时`CGO_ENABLED`默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启`CGO_ENABLED`环境变量。然后通过`import "C"`语句启用CGO特性。 ## 2.2.1 `import "C"`语句 @@ -37,16 +37,17 @@ cgo将当前包引用的C语言符号都放到了虚拟的C包中,同时当前 ```go package cgo_helper +//#include import "C" type CChar C.char func (p *CChar) GoString() string { - return C.GoString((*C.char)(p)) + return C.GoString((*C.char)(p)) } func PrintCString(cs *C.char) { - print(((*CChar)(cs.GoString())) + C.puts(cs) } ``` @@ -55,12 +56,12 @@ func PrintCString(cs *C.char) { ```go package main -// extern char* cs = "hello" +//char* cs = "hello"; import "C" import "./cgo_helper" func main() { - cgo_helper.PrintCString(C.cs) + cgo_helper.PrintCString(C.cs) } ```