包含标签 go 的文章

Gitlab-CI自动化构建内网Go应用程序

使用Gitlab-CI自动化构建内网Go应用程序,将面临以下的挑战:

  • 大型项目中通常使用 go modules 进行管理
  • go.xin****ech.cn 表示内部的GO包管理地址,类似于 http://go.uber.org/ 的站点
  • gitlab.x**i.cn 表示内部的gitlab仓库地址
  • go.xin****ech.cn/xws**/**-service-mgr 表示内部gitlab的其中的project地址

其中,一个比较大的麻烦在于,如何让被编译的应用程序,安全的访问到gitlab,下载处于内网环境的go modules依赖。

……

阅读全文

Go程序添加编译和版本号信息

如题,这是我常在在项目中使用到的Makefile和main.go文件,在程序执行的时候就可以知道git commitversionbuilt time,方便版本管理和更新迭代,以及问题排查。

……

阅读全文

移除Go Import中的多余空白行

使用如下命令: gsed -i '/import (/, /)$/{/^$/d}' $(find . -type f -name '*.go') && goimports -w . gsed 即gunsed,goimports是格式化工具,如果没有安装,可以使用 brew install gnu-sed 进行安装。 达成效果如下: ……

阅读全文

Go语言编译混淆

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

……

阅读全文

Go语言数据包设定mark

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

……

阅读全文

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

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

  • 没有消息时一直阻塞,避免CPU消耗
  • 一旦有消息的时候,只从消息队列里边取最多1秒的数据
  • 或者,一旦有足够消息数量的时候,立即返回
……

阅读全文

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

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

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

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

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

……

阅读全文

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

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

……

阅读全文