使用Go实现一个简单的Web服务器
编辑
57
2024-05-12
前言
Go语言因其简单性、高效的性能以及出色的并发支持而广受欢迎。将通过一个简单的示例,展示如何处理Web请求、配置路由以及如何使用表单。
项目结构
首先,让我们看一下项目的结构:
├── go.mod
├── main.go
├── main_test.go
├── README.md
└── static
├── form.html
└── index.html
main.go: 包含了服务器的主要逻辑。
static/: 存放静态文件,如HTML表单和首页。
go.mod: 定义了项目的依赖。
main_test.go: 用于编写测试代码。
README.md: 项目的说明文件。
核心代码解析
接下来,我们详细解析main.go
中的代码。
导入必需的包
import (
"fmt"
"log"
"net/http"
)
这些包为日志记录、格式化输出和HTTP服务器功能提供支持。
常量定义
const (
port = ":8080"
pathHello = "/hello"
pathForm = "/form"
errorNotFoundMsg = "404 not found"
errorMethodMsg = "Method is not supported"
successPostMsg = "POST request successful"
startingServerMsg = "Starting server at port 8080"
)
这里定义了服务器端口、路由路径和一些常用的消息文本。
处理函数
func handleForm(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
log.Printf("Error parsing form: %v", err)
http.Error(w, fmt.Sprintf("ParseForm() error: %v", err), http.StatusInternalServerError)
return
}
name := r.FormValue("name")
address := r.FormValue("address")
response := fmt.Sprintf("%s\nName = %s\nAddress = %s", successPostMsg, name, address)
fmt.Fprintln(w, response)
}
handleForm
函数处理对/form
路径的POST请求,解析提交的表单,并回应提交者的姓名和地址。
func handleHello(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != pathHello {
http.Error(w, errorNotFoundMsg, http.StatusNotFound)
return
}
if r.Method != "GET" {
http.Error(w, errorMethodMsg, http.StatusNotFound)
return
}
fmt.Fprintln(w, "hello!")
}
handleHello
函数响应/hello
路径上的GET请求,向访问者发送简单的问候。
路由配置与服务器启动
func setupRoutes() {
http.Handle("/", http.FileServer(http.Dir("./static")))
http.HandleFunc(pathForm, handleForm)
http.HandleFunc(pathHello, handleHello)
}
func main() {
setupRoutes()
log.Println(startingServerMsg)
if err := http.ListenAndServe(port, nil); err != nil {
log.Fatal("Error starting server:", err)
}
}
在main
函数中,我们配置了服务器的路由,并在8080端口启动了服务器。
总结
这个示例演示了使用Go语言创建一个基本的Web服务器的过程,从处理静态文件到响应Web请求。Go的简洁性和强大的标凈库使得开发高性能的Web应用成为可能。
希望这篇文章能帮助你入门Go Web开发!如需查看完整的项目代码,请访问我的GitHub仓库:https://github.com/HarleyQiu/go-server。
- 0
- 0
-
分享