0
我希望得到一個字符串變量的數據指針(如字符串:: c_str()在C++中)傳遞到交流的功能,我發現這不起作用:我怎樣才能得到一個字符串變量的數據指針呢?
package main
/*
#include <stdio.h>
void Println(const char* str) {printf("%s\n", str);}
*/
import "C"
import (
"unsafe"
)
func main() {
s := "hello"
C.Println((*C.char)(unsafe.Pointer(&(s[0]))))
}
編譯錯誤信息是: '不能取s [0]的地址。 這將是我確定但我懷疑它會導致不必要的記憶apllying。有沒有更好的方法來獲取數據指針?
C.Println((*C.char)(unsafe.Pointer(&([]byte(s)[0]))))
重申您的最後一個陳述 - 「調用C的開銷比分配內存和複製字符串要大得多」 - 您有任何基準支持它嗎? –
@Not_a_Golfer其實我是。從一年前開始:https://github.com/art4711/cgo_overhead如果我有時間,我會更新到1.8。 – Art
已更新爲1.8。在1.8版本中,與Go函數調用相比,它慢36倍,而不是製作cgo函數調用的92倍。 – Art