Go

Golang语言学习分享

Golang 语言是谷歌开发的编程语言,虽然运行效率比不上 C 语言那么高效,但是也算比 C 语言更容易开发,因为内置了很多数据结构和借鉴了其它语言的优点,容易学习和开发。在实习的阶段也使用 Go 语言开发了一个简单的项目。所以想把学习的一些经验记录下来。

# Golang 的安装

我推荐使用 Linux 系统来学习和使用 Golang 语言,各种发行版的包管理器应该默认都会有 Golang 的安装包。不过还是要说下如何手动安装,去官网下载 Golang 的安装包,至少要 1.7 版本以上。 然后解压缩和配置环境变量,过程很简单。

# Golang 入门

首先,请大家阅读官方的这篇文档How to Write Go Code (opens new window)。这篇文章介绍了如何写一个基本的 Golang 程序和类,这里要说的是GOPATH,使用 Golang 语言必须要设置GOPATH环境变量,可以通过使用go env来查询 Golang 相关的环境变量。GOPATH下一般有三个文件夹 bin,src,pkg。src 下存放我们写的 Golang 项目,bin 下是编译好的二进制文件,pkg 文件夹下是生成的库文件。我们安装的第三方库也会存放在 src 文件夹下,记住 Golang 引用的包名的根文件夹是GOPATH的 src 文件夹,所以我们一般都要使用绝对路径来引用包避免出现错误。

还有要注意的一点是,需要编译的 Golang 项目必须放在GOPATH下的 src 文件夹下,否则编译的时候无法正确的找到相关的依赖包。Golang 还有一个好处就是可以直接以二进制文件的方式运行,只依赖系统的 glibc。所以部署的时候特别方便,不像其他语言一样必须安装相应的解释器。

# Golang 依赖问题

开发程序肯定会使用各种第三方依赖,目前 Golang 语言的各种库都是存放在 github 上,国内下载很不方便,所以要让每个开发者都去下载一份依赖确实很不友好。还好 Golang 在 1.7 版本以上直接 vendor。如果项目里有 vendor 文件夹,Golang 会首先读取这个文件夹作为依赖来使用。使用 Golang vendor 的方法很简单:

go get -u -v github.com/kardianos/govendor
govendor init
govendor add +external
1
2
3

这三个步骤分别是安装,初始化,和添加依赖。这样就在项目本身里面添加了依赖,协同开发的时候大家也没必要再去更新一份,非常方便。

# Golang 性能分析

在开发高性能多并发程序的时候,对系统的实时响应要求很苛刻,这就需要使用专业的分析工具来进行代码分析,确定出耗时代码进行相应的优化。好在 Golang 本身提供了这个工具pprof,这个工具可以列出具体每个函数的耗时,还能进一步跟踪函数里面的具体细节,定位耗时代码。

# Golang 序列化

在开发程序的过程中,为了操作方便,我们会定义各种各样的结构体来表示数据。很多情况下,结构体需要进行网络通讯,这时候我们就不得不序列化结构体进行网络发送。就像前端开发中把 JSON 对象转换成字符串发送出去一样。但是序列化却是一个很耗时的过程,处理不当就会成为系统的瓶颈所在。所以我列举出了几种序列化方案,推荐大家使用。我最后选择的是gencode

# 好用的 Golang 项目推荐

Github 有很多不错的 Golang 项目可以学习借鉴,例如Go Git Service (opens new window),就是一个非常好用的代码托管项目。

# 参考

pprof (opens new window)

Golang Serializer Benchmark Comparison (opens new window)

awesome-go (opens new window)