CGO is realy Cool!
【摘要】 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)