Я пытаюсь отправить некоторые данные из программы C в Голанг. Данные представляют собой исходную структуру C. Я пытаюсь развязать его в Голанге.Каков наилучший способ совместного использования определения структуры в C и Golang?
Образец так:
typedef struct tagA {
int64_t a;
int64_t b;
char c[1024];
}A;
Способ заключается в переписать эту C-структуру для Golang структуры. Скажи:
type A struct{
a int64
b int64
c [1024]byte
}
А затем преобразовать сырой поток байтов данных к нему с помощью encoding/binary
. Но используя этот метод, я должен поддерживать две разные взаимосвязанные структуры.
Другой метод заключается в использовании Cgo
, просто импортируйте файл заголовка языка C (.h
), содержащий эту структуру, и используйте C.A
и небезопасную точку для преобразования необработанных данных в структуру C.A. Но это как-то багги, и я разбился, чтобы преобразовать массив C char в строку Golang.
Каков ваш выбор? Любое предложение?
Это очень плохой подход. Определите формат последовательных данных и используйте правильную сериализацию с битами/маскированием с обеих сторон. Существует достаточно вопросов и ответов об этом, которые можно найти простым поиском. – Olaf
Спасибо @Olaf, при изменении полей инкапсуляции изменилась оболочка обоих кодов? Существует ли подход к «совместному определению» в одном месте? – LiLinZhe
@LiLinZhe, вы можете использовать протокол serializtion со схемой, например, «Буферы протоколов» или FlatBuffers – JimB