Go 基础教程 - 制作简易服务器

95 阅读3分钟

这篇教程以 Go 为核心,主要说明如何使用 Go 语言制作简易的服务器。在开始这篇 Go 教程之前,你可能需要一些 HTML 的基本知识。这篇教程文章中会展示一些使用 HTML 及 CSS 制作而成的网页,我们会公开展示这些比较复杂的代码让大家动手尝试,大部分功能也可以用最简单的 HTML 代码实现。

如果你想对 HTML 有更多的了解,可以参考一下之前的一些 HTML 相关的文章:

无需下载软件,有手就能做的线上个人简历! HTML / CSS / JS 编程入门 —— 制作可切换主题的简单网页

得益于 Go 语言中内建的 HTTP 库,Go 语言在搭建服务器上具有简单、高效的优势。这篇教程中的服务器通过接受 GET 请求并作出反馈,同时使用 POST 请求处理表单提交等任务。

这篇教程基本涉及三个简单的流程:

在编写代码之前,我们需要在 Go 项目中创建名为 static 的文件夹,然后分别新建 index.html 以及 form.html 两个文件。

  1. 支持 Go 语言的编辑器中建立 Go 项目,一般初始文件为 main.go

  1. 在 Go 项目中创建名为 static 的文件夹,然后分别新建 index.html 以及 form.html 两个文件。

配置 main.go 文件

在我们的 Go 主程序中,我们需要先导入三个 Go 语言的基本库。这些库为 Go 语言内建的标准库,不需要额外安装,直接导入即可。

package main

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

接着,我们来看代码中的 main() 部分:

func main() {
   fileServer := http.FileServer(http.Dir("./static"))
   http.Handle("/", fileServer)
   http.HandleFunc("/hello", helloHandler)
   http.HandleFunc("/form", formHandler)
   
   fmt.Printf("在 8080 端口运行服务器\n")
   if err := http.ListenAndServe(":8080", nil); err != nil {
      log.Fatal(err)
   }
}

我们首先通过 fileServer := http.FileServer(http.Dir("./static")) 链接我们事先创建好的文件夹,然后通过 HandleHandleFunc 函数添加服务器路线。

"/hello" 为例,服务器运行后会在网址栏监听 /hello 的请求。当我们在服务器网址后方输入 http://localhost:8080/hello 时,便会运行相应的程序。

主程序末端的三行代码主要是确定程序是否正确运行,若程序出错,代码便会报错。

helloHandler 及 formHandler

我们在主程序中创建了 helloHandlerformhandler 两个函数,这两个函数分别写入以下代码:

helloHandler:

func helloHandler(w http.ResponseWriter, r *http.Request) {
   if r.URL.Path != "/hello" {
      http.Error(w, "404 not found", http.StatusNotFound)
      return
   }

   if r.Method != "GET" {
      http.Error(w, "method is not supported", http.StatusNotFound)
      return
   }

   fmt.Fprintf(w, "hello!")
}

这两个处理程序使用 Request 检查路径是否正确。若路径不正确,则服务器返 StatusNotFound,而若程序与 GET 不符合,则会返回 “method is not supported”。若两者均符合,服务器就会运行下方的程序,在页面中返回 "hello!"。

formHandler:

func formHandler(w http.ResponseWriter, r *http.Request) {
   if err := r.ParseForm(); err != nil {
      fmt.Fprintf(w, "ParseForm() err: %v", err)
      return
   }
   fmt.Fprintf(w, "POST request successful\n\n")
   name := r.FormValue("name")
   address := r.FormValue("address")
   fmt.Fprintf(w, "Name = %s\n", name)
   fmt.Fprintf(w, "Address = %s\n", address)
}

在表单处理程序中,我们则通过 ParseForm() 函数解析所接受的数据并更新 r.PostForm 以及r.Form,通过r.FormValue 访问nameaddress 中的值。最后,我们通过 fmt.Fprintf 将这两个值写入 ResponseWriter 中。

编写 HTML 代码

这篇文章只需要最简单的 HTML 网页代码以及表单代码即可,下方的首页、表单页面可以通过 Lightly 的快照获取完整代码:ad57775530-share.lightly.teamcode.com

试运行服务器

完成代码配置后,我们可以运行程序查看页面运行效果:

在网址栏中末尾输入 /hello,即可返回 "hello!" 文本。

在网址栏中末尾输入 /form.html 跳转到表单页面后,填写表单并点击提交即可跳转到 POST 请求成功页面。