如何在 Go 中构建一个基本的 Web 服务器

系统
Go 强大的内置包集合使其成为 Web 编程的优秀选择,本文将教你如何用 Go 编写一个基本的 Web 服务器。

Go 是一种大有前途的编程语言,用于构建现代 Web 应用程序和系统软件。它一发布就席卷了科技行业,并为 Docker、Kubernetes、Terraform、Dropbox 和 Netflix 等服务提供支持。

此外,Go 强大的内置包集合使其成为 Web 编程的绝佳选择。本文将教你如何用 Go 编写一个基本的 Web 服务器。

导入必要的包

net/HTTP 包提供了创建 Web 服务器和客户端所需的一切。这个包公开了几个处理 Web 编程的有用函数。

您可以通过在源代码顶部添加以下行来导入它:

import "net/http"

我们还将使用fmt包来格式化字符串,使用log包来处理错误。您可以如上所示单独导入它们,也可以使用单个导入语句分解所有包:

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

导入所需的包后,您可以继续编写 main 函数。继续并使用.go扩展名保存源文件。如果您使用的是 Vim,请使用以下命令保存并退出 Vim:

:wq linuxmi.server.go

编写主函数

Go 程序存在于 main 函数中,恰当地命名为“main”。您需要在此处实现服务器调用。在源代码中添加以下行并查看它们的作用:

func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}

我们使用func关键字定义主函数。Go 对左大括号的放置有严格的规定,因此请确保大括号在正确的行上。main 中的第一条语句定义所有到达根 ( “/” ) 路径的 Web 请求都将由index处理,index 是http.HandlerFunc类型的函数。

第二行通过http.ListenAndServe函数启动 Web 服务器。它向服务器发出信号,以持续侦听主机端口 8080 上的传入 HTTP 请求。需要此函数的第二个参数来阻止程序直到终止。

由于 http.ListenAndServe 总是返回错误,我们将这个调用包装在log.Fatal调用中。此语句记录在服务器端生成的任何错误消息。

实现处理函数

可以看到,主函数调用处理函数索引来处理客户端请求。但是,我们还没有为我们的服务器定义这个函数。

让我们添加必要的语句以使索引函数可用:

func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "大家好,欢迎来到Linux迷 %s!", r.URL.Path[1:])
}

此函数采用http.ResponseWriter和http.Request类型的两个不同参数。http.ResponseWriter 参数包含服务器对传入请求的响应,它以 http.Request 对象的形式出现。

fmt 包中的 Fprintf 函数用于显示和操作文本字符串。我们使用它来显示服务器对我们的网络请求的响应。最后,r.URL.Path[1:]组件用于获取根路径之后的数据。

将所有部分加在一起

将所有部分添加在一起后,您的 Go Web 服务器应该已经准备就绪。代码应类似于以下内容:

package main
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "大家好,欢迎来到Linux迷 %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}

第一行用于将此 Go Web 服务器代码编译为可执行文件。

使用 Go 构建 Web 服务器

Go 强大的库包便于初学者进行 Web 编程。只需几行代码,您就可以快速开发简单的 Web 服务器。

此外,这种编程语言强大的测试特性也使得敏捷编程方法的实现变得容易。这些是一组基于迭代开发和团队之间广泛协作的软件开发策略。

责任编辑:赵宁宁 来源: Linux迷
相关推荐

2019-05-08 14:37:49

Web服务器HTTP

2014-10-15 11:01:02

Web应用测试应用

2019-09-23 11:46:02

FedoraTFTP服务器 Linux

2014-04-14 15:54:00

print()Web服务器

2021-07-02 07:18:19

Goresults通道类型

2023-03-30 13:22:45

nginxweb服务器

2022-02-22 11:57:32

BOAWeb服务器

2016-08-10 16:28:00

WebURLHTTP

2024-01-08 08:36:29

HTTPGo代理服务器

2023-12-11 11:56:24

图片服务器Rust

2019-07-05 08:39:39

GoSQL解析器

2017-03-14 09:22:05

2017-04-20 19:15:32

Linux服务器AWS EC2

2011-03-21 14:41:04

LAMPapacheweb

2018-02-28 17:05:19

UbuntuGo语言Git

2013-03-12 09:50:45

GoRESTful Web

2019-08-12 15:44:41

DockerTomcat

2024-05-24 08:31:49

服务器联网SSH

2015-05-25 09:13:31

NTP网络时间协议NTP服务器

2023-10-18 07:52:48

Nginx静态资源服务器
点赞
收藏

51CTO技术栈公众号