一.为什么使用go编写web应用?
1.1 大规模的web应用通常具备以下几点特征:
- 可拓展
- 模块化
- 高性能
- 可维护
1.1.1 go与可拓展的web
两种方法可以对性能进行拓展:
- 垂直扩展 (即提升单台设备的CPU数量或者性能)
- 水平扩展 (即增加设备的数量来提高性能)
go 在垂直扩展拥有不俗的表现: 可以通过调度进行10W个goroutine
go web可以编译成不包含任何依赖的静态二进制文件,可以安装到没有任何go环境的系统中,以一种简单一致的方式部署。
1.1.2 go与模块化的web
go 经常用于创建微服务
1.1.3 go与可维护的web
1.1.4 go与高性能的web
go 语言设计目标就是接近C语言的性能,并发编程。
1.2 Web应用的工作原理
1.2.1 http 简介
无状态,由文本构成的响应-请求协议,使用的是cs计算模型。
1.2.2 幂等的请求
put delete
1.2.3 http2
http2是二进制协议,多路复用,多个请求响应可以在同一时间共用一条连接,从而提高性能
go 1.6之后使用https自动使用http2
1.3 hello-world 第一个go web 应用
package main import ( "fmt" "net/http" ) func handler(writer http.ResponseWriter,request *http.Request) { fmt.Fprintf(writer,"Hello world ,%s",request.URL.Path[1:]) } func main() { http.HandleFunc("/",handler) http.ListenAndServe(":8081",nil) }