内容简介:上一章节我们搭建好了 Go 环境,本节准备在 Windows 下用 Go 写一个简单的 Web 服务器,Go 本身对 Web 开发支持的相当完善,不依赖任何第三方的类库,也不需要依赖容器来运行我们的 Web 服务,编写一个基本 Web 服务器也只要几行代码。首先我们新建项目,打开 cmder 命令控制台工具,进入 E:\GOPATH\src 路径,新建一个 chapter01 文件夹,我们的项目名就叫 chapter01 了,进入 chapter01 项目根目录下,再新建一个 server.go 文件。打开
上一章节我们搭建好了 Go 环境,本节准备在 Windows 下用 Go 写一个简单的 Web 服务器,Go 本身对 Web 开发支持的相当完善,不依赖任何第三方的类库,也不需要依赖容器来运行我们的 Web 服务,编写一个基本 Web 服务器也只要几行代码。
首先我们新建项目,打开 cmder 命令控制台工具,进入 E:\GOPATH\src 路径,新建一个 chapter01 文件夹,我们的项目名就叫 chapter01 了,进入 chapter01 项目根目录下,再新建一个 server.go 文件。
λ E: E:\ λ cd \GOPATH\src E:\GOPATH\src λ mkdir chapter01 E:\GOPATH\src λ cd chapter01 E:\GOPATH\src\chapter01 λ vi server.go
打开 server.go 文件,编写以下几行代码:
*代码清单 - server.go 上简易 Web 服务器代码*
<em>package main
import (
"fmt"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "I'm a cook server.")
})
http.ListenAndServe(":3001", mux)
}</em>
Web 服务器代码写好了,代码里首先是新建一个路由器实例 mux,然后路由器添加一个首页的 Handle Func 函数,它接收一个字符串的 pattern 路径表达式和一个 handler 函数。handler 负责输出一行简单的文字,最后我们通过内置 http 库,使用 3001 端口监听和启动路由服务。
通过 Go 自带的命令 go run 编译运行我们的 server.go 代码:
go run server.go
在浏览器打开首页地址: http://localhost:3001/ ,查看运行结果,这时我们看到浏览器输出 I'm a cool server 这行文字。一个基本的 Web 服务器就这样写好了,非常简单。
如果你要问我,几行代码不知道它的性能怎么样?我只能说如果服务器硬件足够强,你想要它多强,它就有多强,绝对会超出你的期望!
我们现在给服务器稍微润色一下,增加一些可控的参数,设置读写空闲的超时时间、头部数据大小、让它支持优雅地启动和关闭。
*代码清单 - 功能完善的 Web 服务器代码*<em>package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"time"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "I'm a web server.")
})
timeOut := time.Second * 45
srv := &http.Server{
Addr: ":3001",
Handler: mux,
ReadTimeout: timeOut,
WriteTimeout: timeOut,
IdleTimeout: timeOut * 2,
MaxHeaderBytes: 1 << 20,
}
go func() {
if err := srv.ListenAndServe(); err != nil {
log.Fatalf(" listen and serve http server fail:\n %v ", err)
}
}()
exit := make(chan os.Signal)
signal.Notify(exit, os.Interrupt)
<-exit
ctx, cacel := context.WithTimeout(context.Background(), timeOut)
defer cacel()
err := srv.Shutdown(ctx)
log.Println("shutting down now. ", err)
os.Exit(0)
}</em>
这样一个相当完善的 Web 服务器就完成了,目前项目只有一个 server.go 文件,下一节,我们进一步组织项目的代码结构,分一下层,让项目结构更加清晰,为后期提高可维护性做准备。
小结
本章从编写一个简单 Web 服务器开始,对它逐步进行改良完善,使它成为一个正式的 Web 服务器,向外部优雅地提供服务,如果在 C、C++、 Java 上完成这样的工作,用几行代码来完成是无法想象的。总而言之 ,Go 语言对 Web 的支持天生就是简洁和友好的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Web Designer's Idea Book
Patrick Mcneil / How / 2008-10-6 / USD 25.00
The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!
XML、JSON 在线转换
在线XML、JSON转换工具
HSV CMYK 转换工具
HSV CMYK互换工具