包含标签 go 的文章

Go语言编译混淆

Go语言编译的二进制在Panic之后,会泄露一些开发者的信息,某一些信息或许你是期望它们出现在客户的环境上的,那么这里有一些有用的方式去避免它。

……

阅读全文

Go语言数据包设定mark

给数据包设定mark,最常用的场景就是策略路由了,ip rule根据mark来决定数据包的路由方式,以下是经过验证的,go语言给tcp和udp数据包设定mark的方式。

……

阅读全文

GO语言一种按秒聚合消息队列的实现方法

Linux内核大概只有100万次每秒的收发网络数据包的能力,如果需要突破这个限制,那么在客户端发送消息的时候,需要将消息按一定的时间进行聚合再上报,那么如何实现一个像以下需求的消息队列呢?

……

阅读全文

GO语言解析那些乱七八糟JSON字符串的方法

一些脚本语言对Json格式的要求比较松散,导致他们所提供了接口输出的数据也是一样的,可能存在以下这样子的情况:

  • 相同的字段,类型是不固定的
  • 将数据包裹在一个数组时,数组元素的类型也是不固定的

而Go语言本身是强类型的,这给解析这样子的数据造成了麻烦,你当然可以使用interface{}挨个去解析,但随着数据量大了之后,嵌套格式越深,这是一个无底洞。。。

这里将介绍一些go语言json解析的奇技淫巧,让你免遭痛楚。

……

阅读全文

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

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

……

阅读全文

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

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

// 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()去上锁和解锁即可。

……

阅读全文