项目简介:该项目使用Go语言实现了一个简单的Web服务器,支持动态请求处理并且能够实现静态资源服务。
搭建GoWeb框架,并实现HTTP请求、响应功能;
实现了路由匹配,处理各个请求对应的页面模板和参数;
将页面动态输出到浏览器,并支持静态资源服务;
package main
import (
"fmt"
"net/http"
)
func main() {
//设置路由和处理逻辑,即当访问"/"路径时,调用index函数来处理请求
http.HandleFunc("/", index)
http.HandleFunc("/about", about)
//设置静态资源文件夹和对该文件夹的访问路径
fs := http.FileServer(http.Dir("static/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
//开始监听本地8080端口
fmt.Println("Listening on :8080...")
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
func index(w http.ResponseWriter, r *http.Request) {
//设置模板参数
data := struct {
Title string
Message string
}{
Title: "Homepage",
Message: "Welcome to the homepage!",
}
render(w, "index.html", data)
}
func about(w http.ResponseWriter, r *http.Request) {
//设置模板参数
data := struct {
Title string
Message string
}{
Title: "About",
Message: "Welcome to the About page!",
}
render(w, "about.html", data)
}
func render(w http.ResponseWriter, tmpl string, data interface{}) {
//编译指定模板
tmplCompiled, err := template.ParseFiles("templates/" + tmpl)
//如果模板文件有误,则返回500错误
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
//设置utf-8字符编码并调用模板进行渲染
w.Header().Set("Content-Type", "text/html; charset=utf-8")
err = tmplCompiled.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
知识点:
- 基本的HTTP请求和响应处理;
http
包中的HandleFunc()
函数;- Go中的模板渲染;
- 静态文件服务;
- 几种不同路由及其与服务器端处理程序的映射关系;