cxgo使用总结

举报
Amrf 发表于 2022/09/29 21:40:42 2022/09/29
【摘要】 背景业务里使用的tlv协议作为一个环节的协议报文,tlv消息调试的报文的二进制可读性很差,和restful和protobuf这类协议比较起来,协议的request/reponse的定义也比较无序,也就导致了无法利用像swagger这样的工具取描述协议甚至进一步的生成相关的协议代码;为了调试过程更简单,基于gopackets可以对收到tcp的报文信息进行监测,原来考虑采用cgo在这个调试工具...

背景

业务里使用的tlv协议作为一个环节的协议报文,tlv消息调试的报文的二进制可读性很差,和restful和protobuf这类协议比较起来,协议的request/reponse的定义也比较无序,也就导致了无法利用像swagger这样的工具取描述协议甚至进一步的生成相关的协议代码;为了调试过程更简单,基于gopackets可以对收到tcp的报文信息进行监测,原来考虑采用cgo在这个调试工具中对业务中的tlv信息进行可视化转换,实际实施的过程中发现,由于cgo中对c中的结构中的反射能力是不足的导致,需要用go实现很多c/c++中实现的代码,尤其是不能直接利用go提供的大小端函数,并且业务报文变动之后,这个调试工具的实现业务也需要再跟着改,比较麻烦,后来发现一个可以将c转成go的工具,试了试发现转换后枚举和结构定义都转成了go中的形式,这样大小端转换就可以直接利用golang提供的库函数了,类型的反射能力也强化了许多;

工具仓

cxgo

cxgo转换一个目录的配置样例

cxgo.yml

# Specifies the root path for C files
root: ./
# Specifies the output path for Go files
out: ./
package: common
use_go_int: true

# 当需要定义一些编译宏时
# define:
#   - name: QT_CC_MSVC

# 注意转换工具区分"stdint.h"和<stdint.h>
#include: 当需要添加本地头文件引用目录时
#  - /custom/include/path

#sys_include: 当需要添加库头文件引用目录时
#  - /custom/include/path

# List of files to convert. Supports wildcards (*.c).
files:
  - name: xxx.c
  - name: xxx.h
  - name: xxx.c
  - name: yyy.h

# 当需要添加预置的头文件时
#predef: |
#  #include <stdint.h>

然后使用cxgo即可完成转换,过程中如果报错可以根据报错修改配置或者.c/.h源文件;

另一款可以用来功能对比的转换工具

c2go

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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