компилятор всегда говорил:
./skynet.go:266:14: cannot use _cgo2 (type *_Ctype_char) as type unsafe.Pointer in argument to _Cfunc_skynet_classify
строка - ошибка ... Я никогда не думал об этом.
оригинальное развлечение c определите так.
skynet_status_t skynet_classify(skynet_request_t *req,
skynet_classify_type_t type,
const void *data,
size_t length,
skynet_result_t *result);
и я определяю оболочку, подобную этой.
func (s *skynetRequest) Classify(t uint32, data []byte) (*skynetResult, error) {
var result skynetResult
// var temp = C.pass_skynet_result_t((*C.skynet_result_t)(&result))
var status = C.skynet_classify(
(*C.skynet_request_t)(s),
(C.uint)(t),
unsafe.Pointer(&data[0]),
C.ulong(len(data)),
(*C.skynet_result_t)(&result),
)
if status != 0 {
return &result, errors.New("classify error")
}
return &result, nil
}
@ user2089648 напомнил мне, это может не вызывается параметром результата, но может быть вызвано другим параметром , тогда я считаю, что const void *data
должен передаваться следующим образом unsafe.Pointer(&data[0])
, оболочка работает хорошо.