Go
功名半纸
功名未半纸 风雪已千山
展开
-
Go - 访问C动态分配数组
Go - 访问C动态分配数组 使用 unsafe 结合类型转换 *(*[6]C.type) 可将C动态分配数组转换为go识别固定数组类型. 示例 *(*[6]C.uint64_t)(unsafe.Pointer(ptr)) 转换指针ptr 为固定数组类型: package main /* #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> void*原创 2021-07-30 13:47:29 · 275 阅读 · 0 评论 -
Go黑魔法之导出API供C调用
Calling Go functions From C go build 包含一个选项-buildmode可通过配置c-archive &amp;amp; c-shared两种模式分别生成可供C调用的静态 &amp;amp; 动态库. 具体详情可通过go help buildmode查看帮助. 示例 go 代码 这是FastCGI unix socket 简单示例, 响应FastCGI请求回应”H...原创 2018-08-17 12:13:01 · 1806 阅读 · 0 评论 -
Go黑魔法之导出私有函数与私有变量
Go黑魔法之导出私有函数与私有变量 在Go语言中, package中包含函数与变量通过identifier的首字母是否大写来决定它是否可以被其它package所访问。当一个函数或变量名称为小写字母时,默认是无法被其他package引用的. 有没有办法突破这个限制呢? 实际上在go官方文档中已有说明, 这需要用到一个编译器指令 //go:linkname localname import...原创 2018-09-06 11:53:27 · 3987 阅读 · 0 评论 -
Go黑魔法之cgo & reflect访问list存储C指针
在使用 container/list 过程中用其保存C指针,但是发现通过Element -&amp;gt;Value 获取元素值并不能直接转换为unsafe.Pointer使用,只能祭出reflect 大法。通过reflect -&amp;gt; ValueOf -&amp;gt; Pointer 搞定,以下是示例: package main // go build -gcflags=all=&quot;-N -l&quot原创 2018-12-15 17:46:28 · 691 阅读 · 0 评论 -
Go - cgo访问C数组 & 内存
示例 package main /* #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; struct Dog { char name[32];c int id; }; #define MAX_DOG 16 struct Dog dogs[MAX_DOG]; */ import &quot;C&原创 2018-12-15 18:46:17 · 5142 阅读 · 3 评论