当前位置: 首页 > news >正文

枣阳网站建设 枣阳山水数码wordpress怎么更改首页海报轮播图

枣阳网站建设 枣阳山水数码,wordpress怎么更改首页海报轮播图,多后缀域名查询网站,wordpress会员注册在 Java 中调用 Go 的大致过程如下go -- cgo -- jna -- java整个过程要解决的问题主要两个#xff1a;数据类型在两种语言中如何转化何时清理无用的数据下面就围绕上述调用过程来阐述#xff0c;本文涉及代码完整版可以下面链接找到#xff1a;Go - Cgo这是…在 Java 中调用 Go 的大致过程如下go -- cgo -- jna -- java整个过程要解决的问题主要两个数据类型在两种语言中如何转化何时清理无用的数据下面就围绕上述调用过程来阐述本文涉及代码完整版可以下面链接找到Go - Cgo这是跨语言调用的第一步主要是借助 cgo把 Go 代码编译 C 共享库。cgo 是 Go 语言提供与 C 语言互调的一工具。提供一个名为 C 的伪 package供 Go 访问 C 中的变量与函数如 C.size_t C.stdout 等同时提供 5 个特殊函数用于两种语言间类型的转化// Go string to C string// The C string is allocated in the C heap using malloc.// It is the callers responsibility to arrange for it to be// freed, such as by calling C.free (be sure to include stdlib.h// if C.free is needed).func C.CString(string) *C.char// Go []byte slice to C array// The C array is allocated in the C heap using malloc.// It is the callers responsibility to arrange for it to be// freed, such as by calling C.free (be sure to include stdlib.h// if C.free is needed).func C.CBytes([]byte) unsafe.Pointer// C string to Go stringfunc C.GoString(*C.char) string// C data with explicit length to Go stringfunc C.GoStringN(*C.char, C.int) string// C data with explicit length to Go []bytefunc C.GoBytes(unsafe.Pointer, C.int) []byte需要注意一点cgo 中函数不能直接返回 slice/map 等具有 go pointer (区别与 C pointer由 go runtime 管理生命周期)的数据类型否则会报下面的 panic 信息panic: runtime error: cgo result has Go pointer原因也很简单go 是有 gc 的假如允许返回具有 go pointer 的数据那么 C 代码中得到的数据无法保证合法性很有可能已经被 gc 了即悬挂指针问题。解决的方式也很简单就是采用 go 提供的特殊转化函数将数据转为 unsafe.Pointer在 C 中用 void * 的方式去使用。可以想象这些特殊转化函数一定对数据进行了深拷贝来保证数据的合法性可参考 C.CBytes 的定义const cBytesDef func _Cfunc_CBytes(b []byte) unsafe.Pointer {p : _cgo_cmalloc(uint64(len(b)))pp : (*[130]byte)(p)copy(pp[:], b)return p}但这也意味着Go/C 代码中需要负责 free 掉无用的数据(至于哪边 free要看实际情况)。示例func main() {cs : C.CString(Hello from stdio)C.myprint(cs)C.free(unsafe.Pointer(cs))}将 Go 函数导出供 C 调用需要用 //export 标示相关函数并且 Go 文件需要在 package main下。然后用类似下面的 build 命令即可得到与 C 互调的动态库同时会生产一个头文件里面有 export 函数的相关签名。# linux 下可输出到 libawesome.so这里以 Mac 下的动态库为例go build -v -o libawesome.dylib -buildmodec-shared ./main.go//export Hellofunc Hello(msg string) *C.char {return C.CString(hello strings.ToUpper(msg))}// 头文件中 Hello 的定义// ptrdiff_t is the signed integer type of the result of subtracting two pointers.// n 这里表示字符串的长度typedef struct { const char *p; ptrdiff_t n; } _GoString_;extern char* Hello(GoString p0);Cgo - JNA这一步主要是 Java 中如何调用 C 代码目前主要有两种方式JNA优势是调用方便只需要编写 Java 代码JNA 框架负责在 C/Java 中进行数据类型转化JNI优势是性能好缺点是调用繁琐详细区别这里不展开叙述感兴趣的读者可参考下面文章JNA - Java这一步主要是在 Java 代码中如何调用 JNA 框架提供的库进行跨语言调用也是本文的重点。JNA 将 Java 基本类型直接映射为 C 中同等大小的类型这里摘抄如下Native TypeSizeJava TypeCommon Windows Typeschar8-bit integerbyteBYTE, TCHARshort16-bit integershortWORDwchar_t16/32-bit charactercharTCHARint32-bit integerintDWORDintboolean valuebooleanBOOLlong32/64-bit integerNativeLongLONGlong long64-bit integerlong__int64float32-bit FPfloatdouble64-bit FPdoublechar*C stringStringLPCSTRvoid*pointerPointerLPVOID, HANDLE, LPXXX对于 C 中的 struct/pointerJNA 中也提供了 Structure/Pointer 类来对应。JNA 的具体使用过程可参考上述 GettingStarted 中第三种加载动态库的方式(即 resources 下的 {OS}-{ARCH}/{LIBRARY} 目录内)可以把动态库一起打包到 jar 中这对于提供基础类库时比较方便用户不需要再额外配置。resources/├── darwin│   └── libawesome.dylib├── linux-x86-64│   └── libawesome.sovladimirvivien/go-cshared-examples 这个仓库演示了四个函数 Add/Cosine/Sort/Log 的 JNA 调用但这四个函数的返回类型都是基本类型(int/float64)没有 string/slice 等复杂类型因此这里通过五个示例讲述复杂类型的返回问题BadStringDemo.java 本示例演示了网络上一种常见但有内存泄露问题的返回 string 的方式GoodStringDemo.java 这个示例演示了如何正确的返回 stringReturnByteSliceDemo.java 本示例演示如何返回 slice以及如何在 Java 中处理 Go 中的多个返回值ReturnInterfaceDemo.java 本示例演示返回具有 Go Pointer 的结构时的报错行为上述示例均使用 direct mapping 的方式做 JNA这种方式性能更好但是支持的参数类型有限读者可参考 vladimirvivien/go-cshared-examples 学习 interface mapping 的使用方式。总结C 语言作为连接不同高级语言的胶水语言不具备垃圾回收功能所以开发者在做 JNA 时要注意回收无用的内存结构。参考
http://www.zqtcl.cn/news/337322/

相关文章:

  • 网站推广营销联系方式俄语免费网站制作
  • 广东企业网站seo点击软件搭建本地网站
  • 商丘做网站的价格专业网站制作哪家强
  • 瑞安微信网站软件公司网站设计与制作
  • 片头网站网站建设服装在线商城实训报告
  • wordpress做企业网站怎样做网页推广
  • 网站建设售后服务安全维护企业网站开发 外文文献
  • 网站设计英文翻译系统开发的五个阶段
  • 成华区门户网站拍卖网站开发多少钱
  • html设计网站wordpress 评论增加字段
  • 搭建正规网站小程序开发难不难
  • 做静态网站用什么软件自己编写代码建设微网站
  • 备案网站ipoa系统主要干什么的
  • 杭州专业网站建设在哪里wordpress主题重置
  • 仿wordpress站赣州专业网站推广
  • 网站开发需要多长时间python链接wordpress
  • 网上交易网邯郸网站seo
  • wordpress图片后加载外链seo服务
  • 婚庆公司网站建设腾讯广告建站工具
  • 焦作建设厅网站wordpress调用视频播放器
  • 网站版面做好江苏省建设工程设计施工图审核中心网站
  • 智能网站平台wordpress同步头条
  • 做采集的网站有流量吗广州建设学校
  • 建设部网站公告外贸网站建设定制
  • 如何搭建 seo网站上海市住房与城乡建设部网站
  • 百度搜不到自己的网站python云服务器网站开发实例
  • 给企业做网站的业务员优书网没了
  • 江门网站建设方案外包洛阳网站设计哪家专业
  • 电暖怎么做网站办公室平面设计图
  • 全屏网站 功能丽水市企业网站建设 微信营销 影视拍摄