登录
首页 >  Golang >  Go问答

使用cgo传递结构体

来源:stackoverflow

时间:2024-02-22 10:42:24 159浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《使用cgo传递结构体》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在使用 cgo 从 go 调用 c。我想通过函数传递一个结构。 在我的 c 文件中,它看起来像这样:

#include 

void test(teststruct val) {
  printf(val);
}

在我的 go 文件中,我正在这样做:

package main

// #cgo CXXFLAGS: -I/usr/lib/
// #cgo LDFLAGS: -L/usr/lib/ -lstdc++
//#include 
import "C"

type TestStruct struct {
  val  string
  type string
}

func main() {
  var value = TestStruct{ "foo", "bar" }

  C.test(value);
}

但这不起作用。它抛出此错误:

无法确定 c.test 的名称类型


解决方案


TestStruct 未在 C 代码中定义。尝试添加定义。

您还需要在结构中使用 cgo 的 C 字符串而不是 Go 的内置字符串。

顺便说一句:您的 C 代码中还有两个错误。 printf(val) 不起作用,因为 printf 不能用于直接打印结构。另外,出于安全原因,您应该永远printf 的第一个参数使用除字符串文字之外的任何内容。将该行替换为 puts(val.val)printf("%s", val.val) 之类的内容。

终于介绍完啦!小伙伴们,这篇关于《使用cgo传递结构体》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>