Прежде всего, cgo довольно круто, спасибо за это:)
У меня есть вопрос, хотя, у меня есть много структур C, которые просто содержат байтовый массив и я хочу использовать массив в нем как []byte
. ie:
typedef struct {
unsigned char data[64];
} pubkey;
Я хотел бы иметь возможность затем:
type SchnorrPublicKey struct {
pubkey C.pubkey
}
func (key *SchnorrPublicKey) String() string {
return hex.EncodeToString(key.pubkey.data[:])
}
Но я получаю следующую ошибку: ./schnorr.go:39:43: cannot use key.pubkey.data[:] (type []_Ctype_uchar) as type []byte in argument to hex.EncodeToString
Я могу заставить это работать, делая что-то например: return hex.EncodeToString(C.GoBytes(unsafe.Pointer(&key.pubkey.data[0]), C.int(len(key.pubkey.data))))
Но это выглядит довольно глупо, очень сложно преобразовать уже go срез в другой go срез, просто чтобы заменить тип _Ctype_uchar
типом byte
, и в любом случае они на 100% совместимы.
Есть ли лучший способ сделать это?