Копировать содержимое структуры GOLang в структуру C
Я хочу скопировать содержимое структуры GOLang в C Structure. Здесь я хочу, чтобы заполненная структура GO (структура теста типа) была скопирована в структуру C test_c.
Поставили следующую логику. Я получил доступ к структуре C test_c в файле go, как C.test_c, и попытался скопировать содержимое структуры теста в C.test_c (p_c) с помощью C.GoString, но когда я пытаюсь это сделать, я получаю эту ошибку
Может кто-нибудь сообщить мне, в чем заключается ошибка, что я делаю, есть ли лучший способ добиться того же?
./go_structure.go:30: cannot use p_go.a (type string) as type *C.char in argument to _Cfunc_GoString
./go_structure.go:30: cannot use _Cfunc_GoString(p_go.a) (type string) as type [10]C.uchar in assignment
./go_structure.go:31: cannot use p_go.b (type string) as type *C.char in argument to _Cfunc_GoString
./go_structure.go:31: cannot use _Cfunc_GoString(p_go.b) (type string) as type [10]C.uchar in assignment
Ниже приведен код,
go_stucture.go
основной пакет
import (
/*
#include "cmain.h"
*/
"C"
"fmt"
"unsafe"
)
type test struct {
a string
b string
}
func main() {
var p_go test
var p_c C.test_c
p_go.a = "ABCDEFGHIJ"
p_go.b = "QRSTUVXWYZ"
//fmt.Println(unsafe.Sizeof(p_c.a))
fmt.Println("In GO code\n")
fmt.Println("GO code structure Member:a=%s", p_go.a)
fmt.Println("GO code structure Member:b=%s", p_go.b)
p_c.a = C.GoString(p_go.a)
p_c.b = C.GoString(p_go.b)
fmt.Println("Call C function by passing GO structure\n")
C.cmain((*C.test_c)(unsafe.Pointer(&p_c)))
}
cmain.c
#include <stdio.h>
#include "cmain.h"
#include "_cgo_export.h"
void cmain(test_c *value) {
printf("Inside C code\n");
printf("C code structure Member:a=%s\n", value->a);
printf("C code structure Member:b=%s\n", value->b);
}
cmain.h
typedef struct {
unsigned char a[10];
unsigned char b[10];
}test_c;
void cmain(test_c* value);