在 CGO 中使用 C 结构的 golang 结构

标签 go cgo

我会用cgo封装一个c库作为项目使用的go库。看了文档,好像使用cgo有很多规则。我不知道这是否合法。

LibCtx 和 Client 都是 C 中的结构。将 C 结构放入 golang 结构是否合法?

//DBClientLib.go

type DBClient struct {
    Libctx C.LibCtx
    LibClient C.Client
}

func (client DBClient) GetEntry(key string) interface{} {

    //...
}

最佳答案

是的,这是完全合法的。看看这个简短的例子:

package main

/*
typedef struct Point {
    int x , y;
} Point;
*/
import "C"
import "fmt"

type CPoint struct {
    Point C.Point
}

func main() {
    point := CPoint{Point: C.Point{x: 1, y: 2}}
    fmt.Printf("%+v", point)
}

输出

{Point:{x:1 y:2}}

关于在 CGO 中使用 C 结构的 golang 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101022/

相关文章:

git - Docker alpine golang go get error for coding.net private repo

go - 如何在 golang 中使用 LDFLAGS 的相对路径

go - 使用 Gtk+ 的 C 接口(interface)构建 Go

GoLang CGO 文件句柄

c - 在 C 程序中使用 golang 函数

ubuntu - 为什么探查器不适合我?

go - 使用 Go 向 APNS 发出推送请求时出现 403 禁止错误。我是否正确创建了 JWT?

java - 使用 go 管理 Java 进程

go - 从 Go 中的 channel 接收值

android - 在 Mac for Android 上交叉编译 "Hello World"