Go是你可以信任的聪明的人设计的一个可爱小巧的编程语言 ,并且由一个不断增长的巨大开源社区进行持续的完善和提高 。
设置您的环境
当然,第一步是安装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程序。
packagemain
funcmain() {
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服务器。 这是完整的程序。
packagemain
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作为参数,我们做一个简单的字符串类型转换。
funchello(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服务器是产品级的,可以防御常见的攻击。 它可以直接为在线网络提供服务请求。
喜欢Golang
一直没觉得go有什么特别吸引人的地方。。。
做web网站,nodejs和go哪个更好用?