golang 条件编译

实现方式 在源代码的开头第一行指定需要编译的平台,比如要获取磁盘大小,linux和win 平台的方法是不一样的。注意 编译条件的注释和package 语句之间一定要隔一行。不然无法识别编译条件,编译条件支持“非”逻辑,比如某个文件在非 windows 环境下编译,可以写作 // +build !wiondows windisk.go // +build windows package diskinfo // 注意 编译条件的注释和package 语句之间一定要隔一行。不然无法识别编译条件 imp...阅读全文

2019.08.16 11:36 陈Sir的流水账
阅读:569 评论:0

crawlab的golang后端内存分析及优化-基于go pprof

1. 背景 Crawlab发布几个月以来,其中经历过多次迭代,在使用者们的积极反馈下,crawlab爬虫平台逐渐稳定,但是最近有用户报出crawlab启动一段时间后,主节点机器会出现内存占用过高的问题,一台4G内存的机器在运行crawlab后竟然能占用3.5G以上,几乎可以肯定后端服务的某个接口由于代码不规范导致内存占用,于是决定对crawlab进行一次内存分析。 2. 分析 分析内存光靠手撕代码是比较困难的,总要借助一些工具。Golang pprof是Go官方的profiling工具,非常强大...阅读全文

2019年08月20日 hantmac
阅读:861 评论:0

Go 编程: 快速生成自签名证书与双向认证(mTLS)

原文链接: https://www.gitdig.com/genera... 自签名证书双向认证大量用于各类网络集群项目中,例如 Kubernetes. 要实现服务间的证书双向验证,当然前提是要了解证书双向验证原理。相关原理介绍的文章,网上很多这里就不详细说明了。简单贴张图,自行理解。 1. 快速生成自签名证书 生成自签名证书传统工具是OpenSSL。不过OpenSSL不论是其复杂的命令选项,还是更加复杂配置都会让人头皮发麻。这里介绍一个更简单的生成自签名证书的工具: certstrap, 项目...阅读全文

2019-08-30 17:02:36 JayL
阅读:4623 评论:0

Go-JWT-RESTful身份认证教程

1.什么是JWT JWT(JSON Web Token)是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,一个JWT由三部分组成,Header头部、Claims载荷、Signature签名, JWT原理类似我们加盖公章或手写签名的的过程,合同上写了很多条款,不是随便一张纸随便写啥都可以的,必须要一些证明,比如签名,比如盖章,JWT就是通过附加签名,保证传输过来的信息是真的,而不是伪造的, 它将用户信息加密到token里,服务器不保存任何用户信息,服务器通过使用...阅读全文

2019-09-12 16:02:33 TechMojotv
阅读:5009 评论:2

Golang 中使用 Slice + 索引 Map 替代 Map 获得性能提升

起因 在我们的多个线上游戏项目中,很多模块和服务为了提高响应速度,都在内存中存放了大量的(缓存)数据以便获得最快的访问速度。 通常情况下,为了使用方便,使用了 go 自身的 map 作为存放容器。当有超过几十万 key 值,并且 map 的 value 是一个复杂的 struct 时,额外引入的 GC 开销是无法忽视的。在 cpu 使用统计图中,我们总是观测到较为规律的短时间峰值。这个峰值在使用 1.3 版本的 go 中显得特别突出(stop the world 问题)。后续版本 go gc 不...阅读全文

阅读:3758 评论:1

ORM vs. 非 ORM

我一直很喜欢使用 Go 的 database/sql 包来处理数据库。最近,一些涉及 Gorm 的问题激起了我对 Go 中 `使用 ORM` vs. `直接使用 database/sql` 的好奇心。在 ORM 方面曾有过丰富的经验,所以我决定开始一个实验:利用 Gorm 和 非 ORM 编写同一个简单的应用程序,并比较付诸的努力。 这促使我写下了一些关于 ORM 优缺点的想法。如果您对此感兴趣,请继续阅读! ## 非 ORM vs. ORM 的相关经验 实验中,定义了一个可作...阅读全文

2019-09-17 00:30:00 zhoudingding
阅读:3348 评论:8

Go gRPC 系列五:基于 CA 的 TLS 证书校验

前言 大家好,我是煎鱼,在上一章节中,我们提出了一个问题。就是如何保证证书的可靠性和有效性?你如何确定你 Server、Client 的证书是对的呢? CA 为了保证证书的可靠性和有效性,在这里可引入 CA 颁发的根证书的概念。其遵守 X.509 标准 根证书 根证书(root certificate)是属于根证书颁发机构(CA)的公钥证书。我们可以通过验证 CA 的签名从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书(客户端、服务端) 它包含的文件如下: 公钥...阅读全文

2019年10月11日 煎鱼啊
阅读:935 评论:0

加密与解密系列 - 对称加密

原文地址 tpkeep.com 本文讨论的对称加密算法主要包括 DES、3DES、AES DES 明文:64 bit 密文:64 bit 密钥:56/64 bit(每 7 位插入一个校验位的时候为 64 bit) 其设计思想充分体现了香农提出的混淆和扩散原则 image.png DES 使用的是 Feistel 结构来加密的,一共需要 16 轮,加密过程如下: 将明文进行初始置换(通过置换表) 将置换后的数据分为左右 L1 R1 各 32 bit 将 48 bit 的子密钥与 R1 作为轮函数F...阅读全文

2019.10.13 20:09:59 aside section . 等
阅读:864 评论:0

3行写爬虫 - 使用 Goribot 快速构建 Golang 爬虫

zhshch2002/goribot: [Crawler/Scraper for Golang]Make a Golang spider in 3 lines是我的一个业余项目,目的是能尽可能简洁的使用Golang开发爬虫应用。 注意:这个项目正处于beta版本,不建议直接使用在重要项目上。Goribot的功能都经过测试,如果有问题欢迎来提issues。 安装 go get -u github.com/zhshch2002/goribot 复制代码访问网络 不需要冗长的初始化和配置过程,使用go...阅读全文

2019年10月13日 zhshch2002
阅读:1880 评论:0

用Go 学UNIX环境编程 - 记录锁

本文参考《Unix环境高级编程》,Mac下实验结果可能会和书上有所不同(因为书上是以freeBSD进行实验),希望读者可以在不同的系统下进行实验,如果文章有错误的地方,还请提出,我会及时修正。 一、背景: 试想一下当两个人同时编辑一个文件时,其后果是什么样的呢?在unix系统中,文件的状态取决于写该文件的最后一个进程,比如数据库系统,需要保证多个进程写文件,依旧保持正确性。因此unix提供了记录锁的机制,作用是当一个进程正在读或者写一个文件时可以阻止另一个进程对同一个区域进行保护避免冲突。 在g...阅读全文

2019年10月13日 jiangjincc
阅读:742 评论:0

Golang不到100行实现一套灵活的JWT库

JWT 全 chen JSON Web Tokens 现在被广泛的应用于各种前后端分离的场景,他比传统的 Token Session 方式,更具灵活性。 当然网上也有很多开源的 JWT 库,非常之多,开源组织也提供了官方的库。 可以访问这网址去下载: https://jwt.io 复制代码但是如果我们知其然而不知其所以然的使用,难免会有很多问题。 所以这次分享下,我最近自己写的一个 JWT 库,代码已经上传到 github 上了,地址如下: https://github.com/liu57810...阅读全文

2019年10月16日 Golang全栈
阅读:774 评论:0

使用shadowsockets和SwitchOmega畅游互联网

作者: vangoleo官网: http://www.vangoleo.com/ss-visit-internet 背景 互联网本是一个开放、自由、精彩的世界。可是由于某些原因,很多网站在中国大陆是不能访问的,比如Google,Facebook。出于工作或者生活需要,尤其是对于技术开发者,设计师,科学上网是必需的。 为什么需要科学上网? Google:珍惜生命,远离某度。而且Google还提供了许多优质的服务,比如Gmail、文档、论文搜索等。 Youtube:有各种高质量的科技、开发类视频。 ...阅读全文

2019-10-24 09:02:32 vangoleo
阅读:6782 评论:6

拆轮子系列:go的流式处理库go-streams

由于某些原因需要做点骚操作,需要用到类似于flink中的滑动窗口这样的功能,此时我打开了awesome-go上去瞄瞄,看看有没有开源的实现,然后就发现了这篇文章的主角go-streams这个库。 go-streams是什么 一个流式处理库,提供一种简单,简洁的方式构建数据处理的管道。 image.png pipeline流水线处理的需求点有哪些 pipeline流水线处理模式对于解决问题的建模是将任务分为多个依次执行的处理步骤,步骤间通过传输数据相关联:一个步骤的输出是下一个步骤的输入。可以用生...阅读全文

阅读:5087 评论:0

mysql结合golang一次线上连接池事故处理

mysql 服务器默认断开86400 (8小时),以前搞游戏的时候经常一早起来服务挂掉(因为半夜比较多空闲mysql被服务器断开了)解决方案 写一个线程定时ping 能解决。 最近搞的游戏加速器项目。mysql 参数被运维同学改成10了,导致线上mysql 一直 报错 EOF,github里面也挺多人说的。 git图片.png 经过多次调试无果 以为搞不定就先把 //这样设置关闭掉golang mysql 的连接池,每次查询时创建连接,因为阿里云的数据使用域名 地址,总体下来连接时间不稳定 从毫...阅读全文

阅读:2755 评论:1

去除slice中重复的元素,认识空struct

golang标准库本身没有提供一个去除slice中重复元素的函数,需要自己去实现。今天读源码时发现了一个,算是比较优秀的技巧了,如果你有更好的办法,欢迎讨论! 另外让我们看一下空struct的作用,他之前一直没有被我重视,看来以后要多审视自己的coding了! func main() { s := []string{"hello", "world", "hello", "golang", "hello", "ruby", "php", "java"} fmt.Println(removeDupl...阅读全文

2019-12-11 21:32:43 taj3991
阅读:730 评论:0

压测工具

#apache abyum install apr-util#webenchwget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gztar zxvf webbench-1.5.tar.gzcd webbench-1.5make && make install#wrkModern HTTP benchmarking toolhttps://github.com/wg/wrk#gatlingAsync Scala-Akka-Ne...阅读全文

2019-12-27 16:49:29 lobo
阅读:900 评论:0

一个TCP长连接设备管理后台工程(四)

前篇 一个TCP长连接设备管理后台工程(一)一个TCP长连接设备管理后台工程(二)一个TCP长连接设备管理后台工程(三) Github仓库地址 协议解析 从前面内容我们可以发现,808协议是一个很典型的协议格式: 固定字段+变长字段 其中固定字段用来检测一个帧格式的完整性和有效性,所以一般会包含一下内容:帧头+变长字段对应的长度+校验。由于这一段的数据格式固定,目的单一,所以处理起来比较简单。 变长字段的长度是由固定字段终端某一个子字段的值决定的,而且这部分的格式比较多变,需要灵活处理。这一字段...阅读全文

2019-12-31 15:32:33 qiuzhiqian
阅读:391 评论:0

Reflect-Go一分钟快速入门

Reflect 本文侧重讲解reflect反射的实践应用,适合新手初窥门径。 reflect两个基本功能 reflect.TypeOf() 动态获取输入数据的类型 reflect.ValueOf() 动态获取输入数据的值 func TypeOf(i interface{}) Type func ValueOf(i interface{}) Value 复制代码通过reflect.Type和reflect.Value支持的方法,可以对输入的动态数据进行解析。 那么了解reflect.Type和re...阅读全文

2020年01月10日 Tinson
阅读:475 评论:0

Golang写的程序注入一些版本信息,Debug速度自然快几倍!

背景 Go程序运行时打印git提交信息编译信息 Golang编译信息注入程序 当在debug的过程中,我们需要明确当前运行的go程序是什么版本 不要浪费时间在确认版本的问题上 在go build编译的时候是可以注入外部参数的 让go程序在运行的时候就可以打印编译时候的参数情况 以gitlab-runner为例 gitlab-runner -v Version: 11.10.1 Git revision: 1f513601 Git branch: 11-10-stable GO version: ...阅读全文

2020-01-12 23:32:47 流水理鱼
阅读:1014 评论:2