Go Web 学习笔记(一)Go Web 简介


Go Web

Go Web 应用的工作流程

Golang 语言原生提供了用于创建 Web 服务器的 net/http 标准库,利用该标准库只需要使用 ListenAndServe 函数并传入 网络地址(应用运行端口) 以及负责请求处理的 多路复用处理器(handler) 就可以实现一个 Web 应用程序。

如果网络地址为 空字符串,那么服务器使用的就是默认的80端口进行连接。

如果多路复用处理器参数为 nil,那么服务器就使用默认的多路复用处理器 DefaultServeMux。当然也可以使用 NewServeMux 函数创建一个指定的多路复用处理器,多路复用处理器接收到用户的请求之后根据请求的URL来判断使用哪个处理器来处理请求,然后在 重定向 到指定的处理器去处理请求。

一个简单的 Go Web 应用的运行过程如下图所示:

01

主要涉及如下的概念:

  • 多路复用器:接收用户的请求并按照请求的 URL 来判断使用哪个具体的处理器来处理该请求,是整个应用的请求调度核心;
  • 处理器:专门用于处理指定请求的函数,可以自定义结构体实现指定的 ServeHTTP 接口来自定义处理器,也可以创建指定输入输出的函数来作为处理器;
  • 模版引擎:用于加载以及填充数据到指定的 html 页面模版;
  • 模版:专门用于 Go Web 显示的一种 html 页面,中间可以加入专门的 动作来进行数据填充;
  • 模型:用于和数据库打交道的数据表结构体。

Go Web处理请求的简单过程:一个请求(Request)到达应用之后,首先多路复用器根据该请求的 Url 来选择一个指定的处理器来进行处理,在指定的处理器当中会对该请求进行处理,处理过程中需要涉及到数据库操作的就得使用对应的模型进行处理器更改,之后给出对应的响应,响应可以是简单的字符串,也可以是 json 或者 html 页面,响应 html 页面的时候就需要利用模版引擎加载指定的模版,并向模版中填充指定的数据,最后模版引擎将渲染之后的模版数据响应给客户端,就完成了一次请求的处理过程。

搭建一个 Go Web服务器

使用 Go 来创建一个 Hello World Web 项目:

在 Go 的工作目录下的 src 目录下创建对应的 webapptest 目录,作为学习 Go Web 的项目路径,创建完成之后对项目进行初始化操作:

$ mkdir webapptest && cd webapptest
$ go mod init webapptest

go mod init 初始化命后会生成当前项目的相关包信息文件:go.mod、go.sum

  • go.mod 文件存放的是工程包依赖信息
  • go.sum 里面存放的是依赖包的校验信息

在 webapptest 目录下创建 main.go 文件:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	// 将处理器与路径进行绑定
	http.HandleFunc("/", handler)
	// 创建路由并绑定默认的多路复用器处理器
	http.ListenAndServe(":8080", nil)
}

// 创建处理器函数
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "Hello World", r.URL.Path)
}

编译并运行项目:

$ go build main.go
$ ./main

浏览器请求 localhost:8080/ 便可以看见相应的 Hello World 信息了。