cxgo使用总结
【摘要】 背景业务里使用的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.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源文件;
另一款可以用来功能对比的转换工具
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)