mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 04:22:22 +00:00
ch2-2-fix code
This commit is contained in:
parent
e27fc30842
commit
9c5196da23
@ -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 <stdio.h>
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user