Tag:

cgo – 如何将字符串转换为C固定字符数组

我正在尝试在Go代码中实例化一个C结构。 结构是这样定义的(在我无法修改的外部库中): typedef struct { char field1[256]; } S1 在去,我做了这个: func myfunc(mystr string){ // We need to convert mystr from string to char array cStr := C.CString(mystr) defer C.free(unsafe.Pointer(cStr) // Should work now s1 := &C.S1{field1: cStr} // Do something with s1… } 但它没有编译,因为: 不能在字段值中使用cStr(类型* C.char)作为类型[256] C.char 我试过强迫([256] C.char)(cStr),但它显然也不起作用。 有没有办法实现我想要做的事情?

使用Go 1.5 buildmode = c-archive与从C链接的net / http.Server

即将发布的Go 1.5版本附带了新的构建模式 ,允许导出Go符号从C代码链接和调用。 我一直在玩它并得到基本的“Hello world”示例,但是现在我正在尝试链接一个启动net/http.Server的Go库并且它失败了。 代码看起来像这样( 它也可以在这里获得 ): gohttplib.go: package main import “C” import “net/http” //export ListenAndServe func ListenAndServe(caddr *C.char) { addr := C.GoString(caddr) http.ListenAndServe(addr, nil) } func main() {} 实例/ C / main.c中: #include #include “../../gohttplib.h” int main() { ListenAndServe(“:8000”); return 0; } 生成静态链接的对象和标头工作正常: $ go build -buildmode=c-archive 但是编译它是失败的: $ gcc -o gohttp-c examples/c/main.c […]

如何在Go中构建发布版本的二进制文件?

在C中,我们可以构建二进制文件的调试版本或发行版本(目标文件和可执行文件)。 我们怎么能在Go中做到这一点?

如何使用“外部function界面”从Go调用C

如何使用Go的“外部函数接口”调出C函数? 常见问题解答中提到了此界面,但我无法在文档的其他地方看到它。

函数名称和原型中的斜线和点?

我是C的新手,看着Go的源代码树,我发现了这个: https://code.google.com/p/go/source/browse/src/pkg/runtime/race.c void runtime∕race·Read(int32 goid, void *addr, void *pc); void runtime∕race·Write(int32 goid, void *addr, void *pc); void runtime·raceinit(void) { // … } 斜线和点(·)是什么意思? 这是有效的C吗?

为什么cgo的性能如此之慢? 我的测试代码有问题吗?

我正在做一个测试:比较cgo和纯Go函数的执行时间各自运行1亿次。 与Golang函数相比,cgo函数需要更长的时间,我对此结果感到困惑。 我的测试代码是: package main import ( “fmt” “time” ) /* #include #include #include void show() { } */ // #cgo LDFLAGS: -lstdc++ import “C” //import “fmt” func show() { } func main() { now := time.Now() for i := 0; i < 100000000; i = i + 1 { C.show() } end_time := time.Now() […]