草庐IT

go - 如何将 Go 结构转换为 C 结构?

我想用cgo。在C端,我有包含32个字节的结构。structhash{uint8_tbytes[32];};在Go尺寸上,我有非常相似的类型。typeHash[32]bytes我想用Hash类型的实例调用C函数voidf(structhash)。如果可能的话,我还想避免复制该值。简单赋值ChashC.struct_hash:=hash不起作用:cannotusehash(typeHash)astypeC.struct_hashinassignment 最佳答案 您可以使用unsafe包来转换数据。Go编译器无法再检查此处的类型,因此

go - 如何将 Go 结构转换为 C 结构?

我想用cgo。在C端,我有包含32个字节的结构。structhash{uint8_tbytes[32];};在Go尺寸上,我有非常相似的类型。typeHash[32]bytes我想用Hash类型的实例调用C函数voidf(structhash)。如果可能的话,我还想避免复制该值。简单赋值ChashC.struct_hash:=hash不起作用:cannotusehash(typeHash)astypeC.struct_hashinassignment 最佳答案 您可以使用unsafe包来转换数据。Go编译器无法再检查此处的类型,因此

c - 预编译部分依赖 C 来提高速度的 Go 程序

我的部分Go程序依赖于使用import"C"的非常大的C代码库,编译需要几分钟。有什么方法可以预编译C库本身或创建我的Go程序的一个分支,该分支将与C代码一起预编译,这样每次编译主程序时我都不必等待整个C库每次都重新编译? 最佳答案 您可以将其与已编译的目标文件和头文件链接,而不是导入整个C源代码。引用https://golang.org/cmd/cgo/其中涵盖了如何为cgo使用LDFLAGS参数。网上还有其他文档介绍了如何将C代码编译成目标文件(.a和.o文件),例如thisone.您还应该引用您正在使用的库中的文档或其Make

c - 预编译部分依赖 C 来提高速度的 Go 程序

我的部分Go程序依赖于使用import"C"的非常大的C代码库,编译需要几分钟。有什么方法可以预编译C库本身或创建我的Go程序的一个分支,该分支将与C代码一起预编译,这样每次编译主程序时我都不必等待整个C库每次都重新编译? 最佳答案 您可以将其与已编译的目标文件和头文件链接,而不是导入整个C源代码。引用https://golang.org/cmd/cgo/其中涵盖了如何为cgo使用LDFLAGS参数。网上还有其他文档介绍了如何将C代码编译成目标文件(.a和.o文件),例如thisone.您还应该引用您正在使用的库中的文档或其Make

c++ - 自从在 Golang 中删除了一些 C 之后,SWIG for go 是否已经过时了?

我一直在尝试为open-vcdiff生成一个Go包装器,所以我通过以下尝试第一次了解了SWIG:godelta.swig%modulegodelta%include"include/godelta.hpp"godelta.hpp#include"config.h"#include#include#ifdefWIN32#include#include#endif//WIN32#include#include"google/vcdecoder.h"#include"google/vcencoder.h"#include"google/jsonwriter.h"#include"google

c++ - 自从在 Golang 中删除了一些 C 之后,SWIG for go 是否已经过时了?

我一直在尝试为open-vcdiff生成一个Go包装器,所以我通过以下尝试第一次了解了SWIG:godelta.swig%modulegodelta%include"include/godelta.hpp"godelta.hpp#include"config.h"#include#include#ifdefWIN32#include#include#endif//WIN32#include#include"google/vcdecoder.h"#include"google/vcencoder.h"#include"google/jsonwriter.h"#include"google

go - CUDA 内核包装器的共享库 undefined reference

因此,我尝试在Windows上将CUDARuntimeAPI与Go的cgo结合使用。我已经这样做了几天了,但卡住了:我得到了对我的内核包装器的undefinedreference。我已经分离出我的内核并将其包装到下面文件:cGo.cuhtypedefunsignedlongintktype;typedefunsignedcharglob;/*functionPrototypes*/extern"C"voidkernel_kValid(int,int,ktype*,glob*);__global__voidkValid(ktype*,glob*);文件:cGo.cu#include"cG

go - CUDA 内核包装器的共享库 undefined reference

因此,我尝试在Windows上将CUDARuntimeAPI与Go的cgo结合使用。我已经这样做了几天了,但卡住了:我得到了对我的内核包装器的undefinedreference。我已经分离出我的内核并将其包装到下面文件:cGo.cuhtypedefunsignedlongintktype;typedefunsignedcharglob;/*functionPrototypes*/extern"C"voidkernel_kValid(int,int,ktype*,glob*);__global__voidkValid(ktype*,glob*);文件:cGo.cu#include"cG

windows - 如何将 uintptr 转换为 go struct

我尝试使用来自golang包的系统调用调用WindowsAPI(尽量不要使用cgo),但我面对uintptr我不知道如何访问uintptr具有其地址的数据这是我正在做的代码packagesoqimport("fmt""net""syscall""unsafe")const(retErrInsufficientBuffer=122)var(kernel32,_=syscall.LoadLibrary("kernel32")heapAlloc,_=syscall.GetProcAddress(kernel32,"HeapAlloc")heapFree,_=syscall.GetProcAd

windows - 如何将 uintptr 转换为 go struct

我尝试使用来自golang包的系统调用调用WindowsAPI(尽量不要使用cgo),但我面对uintptr我不知道如何访问uintptr具有其地址的数据这是我正在做的代码packagesoqimport("fmt""net""syscall""unsafe")const(retErrInsufficientBuffer=122)var(kernel32,_=syscall.LoadLibrary("kernel32")heapAlloc,_=syscall.GetProcAddress(kernel32,"HeapAlloc")heapFree,_=syscall.GetProcAd