Go Web 编程之 Hello World

2020-01-08  本文已影响0人  darjun

概述

计划写一个讲 Go Web 编程的系列文章。从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识。然后到框架的使用。中间会穿插一些源码的分析。最后做一个实战项目。

目前 Go 社区已经有非常多关于 Web 开发的库或框架。大而全的有beegorevel。超高性能的有echofasthttpgin(目前 GitHub 星标最多)。还有不少专注于具体某个方面的,最多要属路由了,例如:mux/httprouter

那为什么还要从最原始的 net/http 包开始学起?因为这些库/框架大多是基于 net/http 包做了包装,提供易于使用的功能,如路由参数(/:name/:age)/路由分组等。熟练掌握了基础知识和 net/http,学习其他框架必然能有事半功倍的效果。不管是快速上手使用库和框架,还是深入阅读源码,都能得心应手。

HTTP

HTTP 协议是整个互联网的基石。不管技术,产品还是运营,甚至是非互联网行业的人,每天都在与 HTTP 协议打交道。我们每天浏览网页都在使用 HTTP。现在很多 APP 也都在内部使用 HTTP 与服务器交互。所以学习 Web 编程,HTTP 协议是必须要掌握的。

HTTP 是一个无状态的,基于文本的协议。它灵活,稳定,强大。自 1991 年发布以来只进行了几次修订。下面是 HTTP 发展简史:

HTTP 是一种请求——响应模式的协议,所有操作以一个请求开始,以一个响应结束。

HTTP 请求

HTTP 请求的格式非常简单。一个请求由以下 4 个部分组成:

第一个重要的部分为请求行,其格式如下:

Method Path Version

第二个部分为请求的首部,每个首部占一行。首部使用由冒号(:)分隔的键值对表示,如Content-Type: x-www-form-urlencoded

第三个部分为一个空行。注意,即使没有首部,后面的空行也不能省略

最后为一个可选的报文主体。如果有主体,服务器会根据首部中Content-Type指定的格式来解析这部分内容。

HTTP 响应

HTTP 响应的格式与请求非常相似。一个响应由以下 4 个部分组成:

响应行的格式为:

StatusCode Description

响应的首部与主体和请求的一样,这里就不多说了。

这里简单介绍一下状态码。HTTP 将状态码分为了 5 大类,1XX/2XX/3XX/4XX/5XX

第一个 Go Web 程序

Talk is cheap, show me the Code!

接下来,我们来编写一个 Web 版本的 "Hello World" 程序。我们将使用 Go 语言提供的 net/http 包。该包的功能十分强大,使用起来也非常方便。

package main

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

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello World")
}

func main() {
    http.HandleFunc("/", hello)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

我们来解析一下该程序。

http.HandleFunchello函数注册到根路径/上,hello函数我们也叫做处理器。它接收两个参数,第一个参数为一个类型为http.ResponseWriter的接口,响应就是通过它发送给客户端的。第二个参数是一个类型为http.Request的结构指针,客户端发送的信息都可以通过这个结构获取。

然后,http.ListenAndServe将在 8080 端口上监听请求,然后交由hello处理。

由于 net/http 包为我们封装了很多细节,所以我们的使用如此简单。

总结

本文简单介绍了 HTTP 的发展简史、HTTP 请求和响应的格式,并且编写了第一个 Go Web 程序。作为整个互联网的基石,HTTP 协议的重要性怎么形容都不为过,是每个开发人员都必须掌握的知识。Go 语言的 net/http 为 Web 程序的开发封装了很多细节。使用它来开发 Web 程序非常简单。最后,为了能加深学习的印象,我画了一个脑图。期望学完之后能形成一个完整的知识体系。

接下来,我们来深入学习 HTTP 请求的内容。

参考资料

  1. Go Web 编程
  2. HTTP 响应码

本文由博客一文多发平台 OpenWrite 发布!

上一篇 下一篇

猜你喜欢

热点阅读