分类 go 中的文章

Go语言编译混淆

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

……

阅读全文

Go语言数据包设定mark

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

……

阅读全文

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

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

……

阅读全文

gomobile: Hook logrus日志输出至android logcat

实际开发过程中,很多项目使用的日志输出是logrus,为了保持统一,同时又能把日志输出到Android Logcat,同时还带上Android的日志级别。

默认的log.Println,也能输出,但默认的Tag是GoLog,日志级别是info,显然不能满足要求。

……

阅读全文

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

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

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

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

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

……

阅读全文

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代码,可以很容易地通过

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

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

……

阅读全文