mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 12:32:21 +00:00
ch2-2-fix code
This commit is contained in:
parent
e27fc30842
commit
9c5196da23
@ -1,6 +1,6 @@
|
|||||||
# 2.2 CGO基础
|
# 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"`语句
|
## 2.2.1 `import "C"`语句
|
||||||
|
|
||||||
@ -37,16 +37,17 @@ cgo将当前包引用的C语言符号都放到了虚拟的C包中,同时当前
|
|||||||
```go
|
```go
|
||||||
package cgo_helper
|
package cgo_helper
|
||||||
|
|
||||||
|
//#include <stdio.h>
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
type CChar C.char
|
type CChar C.char
|
||||||
|
|
||||||
func (p *CChar) GoString() string {
|
func (p *CChar) GoString() string {
|
||||||
return C.GoString((*C.char)(p))
|
return C.GoString((*C.char)(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrintCString(cs *C.char) {
|
func PrintCString(cs *C.char) {
|
||||||
print(((*CChar)(cs.GoString()))
|
C.puts(cs)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -55,12 +56,12 @@ func PrintCString(cs *C.char) {
|
|||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
// extern char* cs = "hello"
|
//char* cs = "hello";
|
||||||
import "C"
|
import "C"
|
||||||
import "./cgo_helper"
|
import "./cgo_helper"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cgo_helper.PrintCString(C.cs)
|
cgo_helper.PrintCString(C.cs)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user