Go是你可以信任的聪明的人设计的一个可爱小巧的编程语言 ,并且由一个不断增长的巨大开源社区进行持续的完善和提高 。
Go意味着简单, 但有时它的约定可能有点难以理解。 我想告诉你我如何开始我的Go项目,以及如何使用Go的常规用法。 让我们构建一个web应用程序的后端服务。
设置您的环境
当然,第一步是安装Go。 您可以从官方网站为 您的操作系统安装使用二进制发行版 。 如果你在Mac上使用自制程序, brew install go很起作用。 当你完成安装,这应该工作:
$ go version go version go 1.3.1 darwin/amd64
一旦安装完成,唯一另外要做的是设置GOPATH。 这是根目录,将保留你所有的Go代码,建立artifacts。 这个Go工具将在你的GOPATH创建三个子目录:bin,pkg和src。 有些人把它设置成 $ HOME /go,但我更喜欢简单的 $ HOME。确保它能导出到您的环境。如果你使用bash,下面所示的代码应该工作:
$ echo 'export GOPATH=$HOME' >> $HOME/.profile $ source $HOME/.profile $ go env | grep GOPATH GOPATH="/Users/peter"
Go有很多可用的编辑器和插件。 我个人是Sublime Text和优秀的 GoSublime插件的狂热粉丝。 但是语言是非常简单直白的,特别是对于一个小项目,一个纯文本编辑器是绰绰有余的。 我和一群专业的,全职Go开发人员一起工作,他们仍然使用vanilla vim,甚至没有语法高亮显示。 要开始开发Go程序,你肯定不再需要更多的东西。 像往常一样,简单就是王道。
一个新项目
在运作环境中,我们将给这个项目创建一个新的目录。Go工具链期望所有的源代码存在于GOPATH / src,所以我们总是在这个路径下工作。 工具链也可以直接导入和托管在GitHub或Bitbucket等网站上的项目互动,前提是假设他们放在正确的地方。
对于这个示例, 在GitHub创建一个新的空的库。 我将假定它叫做“hello”。 然后,在$GOPATH路径下为它创建一个主页。
$ mkdir -p $GOPATH/src/github.com/your-username $ cd $GOPATH/src/github.com/your-username $ git clone git@github.com:your-username/hello $ cd hello
太好了。 创建 main.go,这将是我们的绝对最小Go程序。
package main func main() { println("hello!") }
调用 go build编译当前目录下的所有文件。 它会产生一个和这个目录名称相同的二进制。
$ go build $ ./hello hello!
简单! 即使编写Go应用程序几年后,我都像这样开始我所有的新项目。 一个空的git存储库,a main.go,一点点的打字。
因为我们注重遵循共同的约定,您的应用程序是可以自动的 go get. 如果你承诺,把这个单一文件放到GitHub, 任何一个安装过Go的人应该可以这样做:
$ go get github.com/your-username/hello $ $GOPATH/bin/hello hello!
创建web服务器
让我们把我们的hello,world变成一个web服务器。 这是完整的程序。
package main import "net/http" func main() { http.HandleFunc("/", hello) http.ListenAndServe(":8080", nil) } func hello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello!")) }
有一点需要拆包。 首先,我们需要从标准库包导入 net/http 。
import "net/http"
然后,在主函数中,我们在网络服务器的根路径下安装一个处理函数。 http.HandleFunc 操作缺省HTTP路由器,一般称为 ServeMux。
http.HandleFunc("/", hello)
函数hello,是一个 http.HandlerFunc ,这意味着它有一个特定类型签名,并可以作为参数传递给HandleFunc。 每次和根路径相匹配的一个新的请求到达HTTP服务器时,服务器将生成一个新的goroutine执行hello函数。 hello函数简单地使用 http.ResponseWriter 写一个响应给客户端。 因为http.ResponseWriter.Write取用更普遍的 []byte或byte-slice作为参数,我们做一个简单的字符串类型转换。
func hello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello!")) }
最后,我们通过 http.ListenAndServe 用默认的ServeMux启动HTTP服务器的8080端口。这是一个同步,或阻塞调用,这将保持这个项目一直运行直到被中断。 编译和运行和之前一样。
$ go build ./hello
在另一个终端,或您的浏览器,创建一个HTTP请求。
$ curl http://localhost:8080 hello!
简单! 没有安装框架,没有依赖下载,没有创建任何项目架构。甚至二进制本身是原生代码,静态链接的,没有运行时依赖关系。 另外,标准库的HTTP服务器是产品级的,可以防御常见的攻击。 它可以直接为在线网络提供服务请求。
原文地址: howistart.org
- 本文固定链接: https://zxbcw.cn/post/1938/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)