GoHTTP静态文件教程展示了如何在Go中设置HTTP服务器以提供静态文件。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
超文本传输协议(HTTP)是分布式协作超媒体信息系统的应用协议。HTTP协议是万维网数据通信的基础。
net/http
包提供HTTP客户端和服务器实现,用于创建GET和POST请求。
静态文件是不会改变的文件。它们包括CSS文件、JavaScript文件和图像;也包括不包含模板指令的纯HTML文件。
http.FileServer
用于提供静态文件。它返回一个处理程序,该处理程序使用文件系统的内容为HTTP请求提供服务。
提供静态文件
在第一个示例中,我们提供包含图像和CSS文件的HTML文件。
go.mod main.go public âââ about.html âââ css â  âââ format.css âââ img â  âââ sid.png âââ index.html
这是项目结构。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/format.css"> <title>About</title> </head> <body> <h2>About page</h2> <p> <a href="/">Home page</a> </p> </body> </html>
这是about.html
文件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="css/format.css"> <title>Home page</title> </head> <body> <h2>Home page</h2> <p> <a href="about.html">About page</a> </p> <figure> <img src="img/sid.png" alt="Sid the sloth"> <figcaption>Sid the sloth</figcaption> </figure> </body> </html>
这是index.html
页面。
* { font-size: medium; background-color:#2c2b2b ; color: #e6d7d7; }
这是CSS文件。
package main import ( "net/http" ) func main() { fs := http.FileServer(http.Dir("./public")) http.Handle("/", fs) http.ListenAndServe(":8080", nil) }
我们设置了服务器。从public
目录中读取静态文件。
Go服务图像示例
在下面的示例中,我们使用模板文件动态生成页面。沿着模板系统,我们为包含在模板文件中的CSS文件设置服务静态文件。
go.mod main.go public âââ css âââ format.css templates âââ layout.html
这是项目结构。
table { border-top: 1px solid #999; border-left: 1px solid #999; border-collapse: collapse; } td, th { padding: 5px; border-right: 1px solid #999; border-bottom: 1px solid #999; } tr:nth-child(2) { background-color: #c1f5f7; }
我们有一些CSS代码来设置HTML表格的样式。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="public/css/format.css"> <title>Users</title> </head> <body> <table> <thead> <tr> <th>User</th> <th>Occupation</th> </tr> </thead> <tbody> {{ range . }} <tr> <td>{{ .Name }}</td> <td>{{ .Occupation }}</td> </tr> {{ end }} </tbody> </table> </body> </html>
在模板文件中,我们有指令将传递的数据合并到HTML表中。format.css
文件包含在模板中并用作静态资源。
package main import ( "html/template" "net/http" "os" ) type User struct { Name string Occupation string } func main() { fs := http.FileServer(http.Dir("public")) http.Handle("/public/", http.StripPrefix("/public/", fs)) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("templates/layout.html")) data := []User{ {Name: "John Doe", Occupation: "gardener"}, {Name: "Roger Roe", Occupation: "driver"}, {Name: "Thomas Green", Occupation: "teacher"}, } tmpl.Execute(w, data) }) http.ListenAndServe(":8080", nil) }
在代码示例中,我们设置了服务静态文件和模板引擎。
fs := http.FileServer(http.Dir("public")) http.Handle("/public/", http.StripPrefix("/public/", fs))
静态资源来自public
目录。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("templates/layout.html")) data := []User{ {Name: "John Doe", Occupation: "gardener"}, {Name: "Roger Roe", Occupation: "driver"}, {Name: "Thomas Green", Occupation: "teacher"}, } tmpl.Execute(w, data) })
public
目录之外的所有资源都由模板引擎管理。在匿名函数中,我们使用template.parseFiles
解析layout.html
文件,并将其与数据合并。
在本教程中,我们展示了如何在Golang中使用静态资源。
列出所有Go教程。