[Go实战]CGO 入门系列-手把手教程1
生活随笔
收集整理的這篇文章主要介紹了
[Go实战]CGO 入门系列-手把手教程1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
CGO 入門系列-手把手教程1
- 背景
- CGO設置
- 簡單的調(diào)用 && 測試
- 運行報錯:
- 報錯問題:
- 解決:
- 解決方案1:goland啟動設置
- 解決方案2:環(huán)境設置(win/linux)
- 正常運行結果:
- 特殊說明
- Go和C互相調(diào)用指針
- 參考
- cgo支持類型查詢
- github項目地址:
- 未完待續(xù)...
背景
官方支持 https://pkg.go.dev/cmd/cgo
CGO設置
要使用CGO特性,需要安裝C/C構建工具鏈,在macOS和Linux下是要安裝和GCC,在windows下是需要安裝MinGW工具。同時需要保證環(huán)境變量`CGO_ENABLED`被設置為1,這表示CGO是被啟用的狀態(tài)。在本地構建時`CGO_ENABLED`默認是啟用的,當交叉構建時CGO默認是禁止的。比如要交叉構建ARM環(huán)境運行的Go程序,需要手工設置好C/C交叉構建的工具鏈,同時開啟`CGO_ENABLED`環(huán)境變量。然后通過`import "C"`語句啟用CGO特性。簡單的調(diào)用 && 測試
demo1.go – 直接調(diào)用c內(nèi)置方法
// hello.go package main//#include <stdio.h> import "C"func demo1() {C.puts(C.CString("Hello, World1\n")) }demo2.go – 調(diào)用自己寫的方法
// hello.go package main/* #include <stdio.h>static void SayHello2(const char* s) {puts(s); } */ import "C"func demo2() {C.SayHello2(C.CString("Hello, World2\n")) }demo3.go – 調(diào)用.h文件的方法
package main//#include"lib/hello.h" import "C"func demo3(){C.SayHello(C.CString("Hello, World3\n")) }lib/hello.h – .h文件
// hello.c#include <stdio.h>void SayHello(const char* s) {puts(s); }main.go
package mainfunc main() {demo1()demo2()demo3() }運行報錯:
報錯問題:
# cgo cc1.exe: sorry, unimplemented: 64-bit mode not compiled in解決:
解決方案1:goland啟動設置
CGO_ENABLED=1;GOOS=windows;GOARCH=386解決方案2:環(huán)境設置(win/linux)
Windows: SET CGO_ENABLED=1 SET GOOS=windows SET GOARCH=386 go build -o server.exe main.goLinux: SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build -o server main.go正常運行結果:
特殊說明
Go和C互相調(diào)用指針
Go調(diào)用C Code時,Go傳遞給C Code的Go指針所指的Go Memory中不能包含任何指向Go Memory的Pointer。C調(diào)用的Go函數(shù)不能返回指向Go分配的內(nèi)存的指針。參考
參考鏈接:<https://blog.csdn.net/weixin_34055787/article/details/88883037> 參考鏈接:<https://chai2010.cn/advanced-go-programming-book/ch2-cgo/ch2-07-memory.html>cgo支持類型查詢
github項目地址:
https://github.com/zld126126/MyGolang/tree/main/cgo
未完待續(xù)…
總結
以上是生活随笔為你收集整理的[Go实战]CGO 入门系列-手把手教程1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Win10 IIS 的最小配置
- 下一篇: ABAP 外币金额转人民币金额函数 CO