CGO
cgo尝试
环境
gcc需要; go环境变量 CGO_ENABLED需要设置为1
goland不支持补全cgo中的c或者c++代码, 需要使用专门的cpp的ide, 我现在用的是 vs2022
类型系统的对应
c的类型与cgo都需要对应;
00:26有一张表格
编译器类型
gcc和g++都是常用的编译器
cgo语句
cgo语句是cgo功能的语法命令.
需要导入go的C包, 然后在导入语句上面写上特定语法的注释才能生效.
注意需要是单独导入才能生效...?
一个cgo的示例代码:
package mygo
/*
#cgo CFLAGS: -I/root/USB_SATA_v1.4/include
#cgo LDFLAGS: -L/root/USB_SATA_v1.4/arm64 -lTassSDF4PCIeSM
#include "SDF4PCIeSM.h"
#include "TassAPI4PCIeSM.h"
#include "TassMngAPI4PCIeSM.h"
*/
import "C"
import (
"fmt"
"time"
"unsafe"
)
func CallPrintf(content string) {
var device unsafe.Pointer // void*
result := C.SDF_OpenDevice(&device)
if result != 0 {
fmt.Printf("设备打开失败")
return
} else {
fmt.Printf("设备打开成功\n")
time.Sleep(3 * time.Second)
defer func() {
C.SDF_CloseDevice(device)
fmt.Printf("设备关闭成功\n")
}()
}
}
func main() {
CallPrintf("")
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)