分类 go 中的文章

CGO类型及常见类型转换

关于Cgo的相关类型描述,官网上有这么一段话:

The standard C numeric types are available under the names C.char, C.schar (signed char), C.uchar (unsigned char), C.short, C.ushort (unsigned short), C.int, C.uint (unsigned int), C.long, C.ulong (unsigned long), C.longlong (long long), C.ulonglong (unsigned long long), C.float, C.double, C.complexfloat (complex float), and C.complexdouble (complex double). The C type void* is represented by Go’s unsafe.Pointer. The C types __int128_t and __uint128_t are represented by [16]byte.

……

阅读全文

CGO: C语言调用GO语言的函数

网上有很多例子告诉你怎么从Go语言调用C语言的函数,但鲜少文章有告诉你,其实CGO开发中,还可以从C语言函数中,调用Go语言写的函数,而你只需要简单的加一个// export注释就可以了。

……

阅读全文

Go语言通过JNI调用java的方法

最近有一个问题,是在golang作为底层,想获取apk的版本号和版本号代码(通俗一点就是versionName和versionCode),如果这时java代码,可以很容易地通过

1
2
3
4
// please add try/catch ... ;-)
PackageInfo info = context.getPackageManager().getPackageInfo(getPackageName(), 0);
String versionName = info.versionName;
int versionCode = info.versionCode;

来获取,但是,如果你的主要程序都是go语言来写,需要在go语言中获取apk的版本号怎么处理呢?

……

阅读全文

使用gdb远程调试Go代码(arm)

研究的这个最主要原因是arm平台无法使用delve工具无法在arm平台上使用,而现实中你的程序不可能没有bug,这时候查起问题来没有debug就太痛苦了~

……

阅读全文

Go语言巧用文件锁避免多个进程同时存在的问题

现实情况是你所开发的程序有可能被意外地多次拉起,而使用文件锁的排他锁功能可以解决这个问题。

文件锁有几个好处:

  1. 避免多个进程同时存在
  2. 程序意外中断,文件锁会自动解锁,而不自己亲自去收拾残局

使用起来也很简单,只需要指定一个lock文件,然后使用syscall.Flock()去上锁和解锁即可。

……

阅读全文

Go语言远程调试方法

基本的环境:

  • 本地是MacOS和IntelliJ Idea环境
  • 远程是Linux-amd64的环境

简而言之,在本地的IDEA开发环境里边,对远端运行的程序进行调试。

……

阅读全文

govendor实用技巧

关于govendor

govendor是go语言依赖管理工具,推荐使用 https://github.com/kardianos/govendor 这个版本。

1
go get -u -v github.com/kardianos/govendor

第一次初始化的时候,只需要govendor init命令行执行一下就可以了。

它的使用起来就像nodejs的yarnnpm包管理工具一样简单!

……

阅读全文

关于使用Go开发Android和iOS底层代码,你想了解的都在这。

先来讲一下使用Go语言开发Android和iOS底层代码的好处:

  • 可以编译成静态的libgojni.so<PKG>.framework
  • 跨平台代码复用率极高
  • 二进制程序的安全性很好
  • 代码可维护性很好

本文章介绍的内容:

  1. 如何传递Go语言的’对象’至目标平台的语言
  2. 如何传递目标平台语言至Go语言
  3. 可穿越语言边界的数据类型,以及如何传递复杂类型
  4. 如何在Go语言中使用目标平台语言已有的package
  5. 如何有针对性的区分androidiosGO语言代码
……

阅读全文

你一直在寻找的GO语言条件编译

  • 你还在寻找类似于像C语言的#if defined条件编译吗?

  • 你的Go程序运行于多个平台上(如Linux和Windows),相同功能有着不同的实现,你知道怎么处理吗?

  • 你的Go程序运行于多代产品上(如一代盒子,二代盒子),相同功能有着不同的实现,你知道怎么解决吗?

阅读本文章,对于解决以上的疑惑,一定有所帮助。

……

阅读全文