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注释就可以了。

……

阅读全文

使用C语言来写一个Python扩展库

一些加密解密功能比较重要,底层的实现不应该被外界的人所感知。

跟随我的步伐,花费10分钟的阅读时间,三步之内解决使用C语言来写扩展库的问题(python 2.7)。

……

阅读全文

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的版本号怎么处理呢?

……

阅读全文

Laravel配置Webpack的alias以及VScode配置jsconfig.js

现阶段一些前端界面还是使用了Laravel框架+Vue结合起来写,每次import的时候,都是长长的相对路径,比如 ../../../utils/utils,看起来很别扭。

花上两分钟时间,让你在VSCode可以使用import utils from "@/utils/utils"import语句; 并且,还可以让VScode继续保持着代码自动补全功能。

……

阅读全文

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

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

……

阅读全文

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

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

文件锁有几个好处:

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

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

……

阅读全文

Go语言远程调试方法

基本的环境:

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

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

……

阅读全文