从[] byte到char*

Fre*_*Foo 12 c pointers go cgo

我想包装一个C函数,该函数char*指向非空字节缓冲区(的第一个元素).我正在尝试使用CGo将它包装在Go函数中,以便我可以传递它[]byte,但我不知道如何进行转换.C函数签名的简化版本是

void foo(char const *buf, size_t n);
Run Code Online (Sandbox Code Playgroud)

我尝试将指针传递给byte切片中的第一个

C.foo(&b[0], C.size_t(n))
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译:

cannot use &b[0] (type *byte) as type *_Ctype_char in function argument
Run Code Online (Sandbox Code Playgroud)

那么这里的正确程序是什么?在去维基仅描述了相反的情况.

Fre*_*Foo 27

好吧,结果比我想象的容易得多:

(*C.char)(unsafe.Pointer(&b[0]))
Run Code Online (Sandbox Code Playgroud)

诀窍.(在golang-nuts发现了这个.)