CGO is realy Cool!

举报
Amrf 发表于 2022/07/25 15:06:01 2022/07/25
【摘要】 CGO is realy Cool!!c/c++中json和struct互转是一个比较麻烦的问题,想要用低侵入的手段处理这个问题确实不是很容易,cgo中go公用c的结构体定义,在go中进行json操作和后续的其他业务感觉是个不错的注意.package main//#cgo CFLAGS: -I /code/xxx/include//#include "xxx.h"/*typedef stru...
  • CGO is realy Cool!!

c/c++中json和struct互转是一个比较麻烦的问题,想要用低侵入的手段处理这个问题确实不是很容易,cgo中go公用c的结构体定义,在go中进行json操作和后续的其他业务感觉是个不错的注意.

package main

//#cgo CFLAGS: -I /code/xxx/include
//#include "xxx.h"
/*
typedef struct Point {
    int x , y;
} Point;
struct struct_xxx xxx;
*/
import "C"
import (
	"fmt"
	"log"
	"nep_go_st/json"
)
type CPoint struct {
	Point C.Point `json:"point"`
}
func main() {
	point := C.Point{x: 1, y: 2}
	ret1, err := json.Marshal(point)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(ret1))
	ret1, err = json.Marshal(C.xxx)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(ret1))
}

需要注意一点cstruct中的字段小写和go struct里面一样会被识别为isUnexported,修改为大写则可以正常在json字符串中看到;
如果不想修改cstruct中的定义, 则可以将encode/json拷贝到项目目录做一下定制修改,修改encode.go中的isUnexported为true,则就算字段小写也可以在输出窗口看到;

妙!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。