Go从1.11
版本开始内置包管理工具,直到1.14
已经正式支持Go Mdoule。以最新版Go1.13为例,学习GO包管。
Go1.5至Go1.14的版本更新史
我们现在使用的是Go 1.7.6版本。至于为什么从1.5开始总结,这是一个很重要的版本,实现方面有很多变化。最重要的是实现了自举。本文列出一些重大变化以及对我们升级有用的信息。
使用Docker构建go程序
最近公司内部Go版本需要从1.7升级到最新版,涉及项目众多。为了正式环境自动构建系统能够兼容多版本方式构建,除了使用GVM方式之外,考虑到使用Docker Go程序构建容器更加的快速,不用每次版本切换时需要重新指定GOPATH。当然升级的目的,不仅仅的性能提升,第三方包兼容等,我们也会引入Go Moudule。特此记录此次Go升级实践。
Go语言参数传递是传值还是传引用
Go语言参数传递是传值还是传引用?首先我们先了解下两个概念:
- 传值(Pass By Value) 函数传递的总是原来这个东西的一个副本,一副拷贝。修改拷贝不会对原对象产生影响。
- 传引用(Pass By Reference) 函数传递的总是原来这个东西的指针引用,修改拷贝改变原对象的值。
通过上面的描述,很容易让人误认为Go语言参数传递是有传值和传引用的,恰恰相反,Go语言的参数传递是没有引用的,只有传值。如果现在你脑海里有跟我一样的迷惑请往下看个例子。
Redis命令行通讯协议
Redis客户端通过RESP(REdis Serialization Protocol )协议与服务端通讯。Redis集群是则是通过另一协议来处理节点间的通讯。
RESP有以下特点:
- 简单且容易实现
- 能够快速解析
- 可读的
RESP 能够序列化各种类型,包括整形,字符串,数组,错误类型. 客户端连接服务端的数据是以字符串数组的形式发送给服务端,相当于命令的参数形式。Redis 响应命令执行结果数据.
RESP 是二进制安全的,不需要从一个进程传送大量的数据,因为使用了前缀长度(prefixed-length)传送数据。