
Hello, Go!
最近开始放飞自我,想学点新技术,恰好接触到 Golang 语法风格和 C 的语法风格相似,就想尝试一下。于是,就有了这篇比较水的入门文章。自然,列位看官,若是觉得此文太水,求轻喷~拜谢 🙈😁。
闲言少叙,开始正文。
下载与安装
在 macOS(OS X) 上安装 Go 很简单,直接到 https://golang.org/dl/ 下载对应的 pkg 安装包即可。
如果是只有 terminal 的服务端,那就借助命令行来安装。
本文主要以 CentOS 7.2 作为操作环境,macOS 可能有些许不同。
下载
到具有写权限的目录下下载最新版本的安装包,并对安装包进行校验。
cd /tmp |
安装
sudo tar -C /usr/local -xvzf go1.8.1.linux-amd64.tar.gz |
验证
查看 Go 的版本号,即可验证 Golang 是否安装成功。
go version |
设置 Go 的环境变量
设置环境变量
设置 Go 语言环境变量,便于执行 Go 的命令。
sudo vi /etc/profile.d/path.sh |
追加输入以下内容。如果,你的 Go 所安装的路径不是 /usr/local 那就替换为你实际的安装路径。
export PATH=$PATH:/usr/local/go/bin |
vi(vim) 打开 ~/.bash_profile
vi ~/.bash_profile |
编辑如下内容。
export GOBIN="$HOME/projects/bin" |
利用 source 命令将最新的配置,应用到当前的 BASH 会话中。
source /etc/profile && source ~/.bash_profile |
Hello, World
是的,没错~万年不变的 Hello World。
配置项目目录
创建 Go 项目目录,一般 Go 目录包含 bin、pkg、src。其中,bin 用来存编译后的二进制文件,pkg 用来存包文件,src 用来存程序源码。
cd ~ |
创建 hello.go
vi ~/projects/src/hello.go |
打开 hello.go 文件后,输入以下内容。
package main |
编辑完文件后,在终端输入如下命令。
go install $GOPATH/hello.go |
查看 Go 的手册可以得知 go install 是用来编译以及安装依赖包的。
Usage: |
之后,在终端就会输出 Hello, World! 了。
搭建 Go 的 Web 服务
写完 Hello, World! 之后接下来该做什么呢?既然,我们能让 Hello, World! 在终端输出,是否能够让它在浏览器里输出呢?当然必须可以的~那么,接下来就开始搭建 Go 的服务端。
监听 TCP 端口
与 PHP 不同, Go 不需要 Nginx、Apache 这样的服务器。Go就是不需要这些,因为他直接就监听 TCP 端口了,做了 Nginx 做的事情。
修改
所以,接下来就写代码,把 hello.go 稍加修改。
package main |
以上这段代码,新引入了 log net/http html/template 这几个依赖包。 |
重新编译 hello.go 终端输出结果,那我们的文件修改就完成了。但是,问题又来了。如何运行 Go 的进程,并且不中断终端的其他操作呢?
这里就需要安装一个新的进程守护软件「supervisor」。
Supervisor 管理进程
Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems.
Supervisor 是一款类 UNIX 操作系统上,用来管理多个进程的客户端/服务端的系统。 项目的开源仓库在 https://github.com/Supervisor/supervisor ,使用配置也比较简单,接下来就开始学习 Supervisor 来管理我们 hello.go 的进程。
安装
在 CentOS 上利用 yum 安装 python 的工具,用 easy_install 安装 supervisor。
sudo yum install python-setuptools |
配置 supervisord.conf
输入以下命令,生成配置文件。
sudo echo_supervisord_conf > /etc/supervisord.conf |
修改配置文件,配置 Go 应用。
[program:golang-http-server] |
Supervisor 的客户端和服务端
开始使用 Supervisor 之前要先分清 Supervisor 的客户端和服务端。
笔者就是一开始没有分清这两个工具,一开始就不懂怎么在修改完 *.go 程序源码之后重启进程让服务更新。毕竟,Go 不像 PHP 一样可以重启 Nginx、Apache 服务器,而是通过 Supervisor 来管理进程,所以必须要搞清楚谁是 Client ,谁是 Server。
- 客户端
supervisorctl 是 Supervisor 的客户端,一般我们用 supervisorctl 来管理配置好的应用进程。 终端输入 supervisorctl --help 来查看 supervisorctl 用法。
supervisorctl --help |
因此,可以确定 supervisorctl 是管理应用的客户端。
- 服务端
同样,来看服务端。
supervisord --help |
由此,更加确定 supervisord 是将应用作为后台程序运行的服务端。
管理 Go 进程
开启、重启、停止 Go 进程都在 supervisorctl 中进行。在终端直接输入 supervisorctl 则可进入 Supervisor 的客户端。
supervisorctl |
可以看到,我们刚才配置的 golang-http-server 正在运行。
继续输入 help 可以看到默认的所有命令。
supervisor> help |
比如,当我们重新修改 hello.go 文件的话,就直接可以使用 supervisorctl 来重启 golang-http-server 这个应用的进程。
除此之外,当我们对 supervisord.conf 文件进行修改。
vim /etc/supervisord.conf |
要从新配置相关文件,则须如下命令。
/usr/bin/supervisord -c /etc/supervisord.conf |
两条命令的顺序不要错,不然会报 Python 和 Unix 错误。
那么,到此为止,我们访问服务器的 IP/域名:9090 端口就可以看到 Hello Go, NY 这个输出了。然而,问题又来了,我们可以像客户端(浏览器)输出一段 raw string ,那我们是否可以直接解析 HTML 文档,并向浏览器输出呢? 当然仍是可以的,接下来就继续看如何加载 HTML。
输出 HTML
编辑 HTML 文档
输入以下 HTML 并保存为 ny-home.html 文档。
|
修改 hello.go
package main |
修改并保存 hello.go 文件后,重新编译出二进制文件。
go install $GOPATH/hello.go |
编译成功后,用 supervisorctl 重启应用进程。
supervisorctl |
最后访问 http://www.niyao.space:9090/ 就可以看到最终的成果啦。
到此,如何搭建一个 Golang 的 Web 服务就算比较完满的入门了。当然,我的习惯是现做应用小 demo 然后再慢慢熟悉语言的具体语法细节,所以,还是 Go 小白一枚,如果文中有错误,欢迎指出十分感谢,可以关注我的公众号向我反馈,十分感谢 😁 ~

参考资料
- How To Install Go 1.7 on CentOS 7 https://www.digitalocean.com/community/tutorials/how-to-install-go-1-7-on-centos-7
- supervisor 运行 golang 守护进程 http://www.01happy.com/supervisor-golang-daemon/
- Go Web 编程 https://astaxie.gitbooks.io/build-web-application-with-golang/zh/