Go Web 入门与实战系列:构建 Go Web 服务器

3,063 阅读3分钟

这是我参与8月更文挑战的第2天,活动详情查看: 8月更文挑战

Web 应用程序是一种可以通过 Web 访问的应用程序,Web 程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件。Web 应用对于身处互联网时代的我们来说太普遍。无论哪一种语言,只要它能够开发出与人类交互的软件,它就必然会支持 Web 应用开发。 本系列文章将会介绍 Go Web 的应用与实践。欢迎关注。

上一篇文章介绍了访问 Web 站点的过程。用户在浏览器地址栏输入请求 URL,发起请求。通过 DNS 获取到主机的实际地址,这样就可以访问对应的服务器。服务器根据请求的类型返回给浏览器。了解了我们敲击回车之后,Web 应用访问所涉及的一系列步骤。接下来我们来具体构建 Go Web 服务器。

使用 Go 构建服务器

Go 在标准库中提供 HTTP 协议的支持,通过它可以快速简单的开发一个 Web 服务器。同时,Go 语言为开发者提供了很多便利。在介绍了 Web 相关的工作过程后,我们将会搭建一个 Go 语言版本的 Web 应用程序。

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
	_ = r.ParseForm()   //3 解析参数,默认是不会解析的
	fmt.Println(r.Form) //4 输出到服务器端的打印信息
	fmt.Println("Path: ", r.URL.Path)
	fmt.Println("Host: ", r.Host)
	for k, v := range r.Form {
		fmt.Println("key:", k)
		fmt.Println("val:", strings.Join(v, ""))
	}
	_, _ = fmt.Fprintf(w, "Hello Web, %s!", r.Form.Get("name")) //5 写入到 w 的是输出到客户端的内容
}

func main() {
	http.HandleFunc("/", sayHello)           //1 设置访问的路由
	err := http.ListenAndServe(":8080", nil) //2 设置监听的端口
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

如上代码实现了一个简单的 Go Web 程序。在程序中配置了 Web 监听的端口为:8080,通过访问 http://localhost:8080/hello?name=aoho,得到如下图所示的响应结果。

image.png

同时在控制台中,输出了如下的日志信息:

map[name:[aoho]]
Path:  /hello
Host:  localhost:8080
key: name
val: aoho

主函数中的注释 2 用于设置 Web 服务监听的端口号。注释 1 是设置访问的路由,所有的请求都由 sayHello 处理。在 sayHello 方法中,首先会解析参数,默认是不会解析的。我们将部分信息在服务器打印出来(包括请求的路径,请求的 Host 地址,Form 表单中的键值对),并且在注释 5 将指定的表单信息作为输出到客户端的内容,如示例中 的 name 对应的值。

小结

本文主要介绍使用 Go 构建服务器。Go 在标准库中提供了 HTTP 协议的支持,我们通过 net/http 可以很方便地实现一个 Go Web 程序。只要调用 Http 包的两个函数就可以了。下面的文章将会深入实现原理,具体讲解 Go 是如何接收和处理请求。

阅读最新文章,关注公众号:aoho求索