Go Web 示例: 中间件(高级)

中间件(高级) 这个例子将展示如何在 Go 中创建一个更高级的中间件版本。 中间件本身只是简单地将 http.HandlerFunc 作为其参数之一,包装它并返回一个新的 http.HandlerFunc 供服务器调用。 在这里,我们定义了一种新类型的中间件,它最终可以更容易地将多个中间件链接在一起。 这个想法的灵感来自 Mat Ryers 关于构建 API 的演讲。 你可以找到更详细的解释,包括这里的谈话。 此代码段详细解释了如何创建新中间件。 在下面的完整示例中,我们通过一些样板代码减少了这个版本。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 func createNewMiddleware() Middleware { // Create a new Middleware middleware := func(next http.

Go Web 示例: 密码散列 (bcrypt)

密码散列 (bcrypt) 这个例子将展示如何使用 bcrypt 散列密码。 为此,我们必须像这样获取 golang bcrypt 库: $ go get golang.org/x/crypto/bcrypt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // passwords.

Go Web 示例: 模板

简介 Go 的 html/template 包为 HTML 模板提供了丰富的模板语言。 它主要用于 Web 应用程序中,以在客户端浏览器中以结构化方式显示数据。 Go 模板语言的一大好处是自动转义数据。 无需担心 XSS 攻击,因为 Go 会解析 HTML 模板并在将其显示给浏览器之前转义所有输入。 第一个模板 在 Go 中编写模板非常简单。 此示例显示了一个 TODO 列表,在 HTML 中编写为无序列表 (ul)。 在渲染模板时,传入的数据可以是任何一种 Go 的数据结构。 它可能是一个简单的字符串或数字,甚至可以是嵌套的数据结构,如下例所示。 要访问模板中的数据,最顶层的变量是通过 {{.}} 访问。 花括号内的点称为管道和数据的根元素。 1 2 3 4 5 6 7 8 data := TodoPageData{ PageTitle: "My TODO list", Todos: []Todo{ {Title: "Task 1", Done: false}, {Title: "Task 2", Done: true}, {Title: "Task 3", Done: true}, }, } 1 2 3 4 5 6 7 8 9 10 <h1>{{.

Go Web 示例: 表单

表单 此示例将展示如何模拟联系表单并将消息解析为结构体。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 // forms.go package main import ( "html/template" "net/http" ) type ContactDetails struct { Email string Subject string Message string } func main() { tmpl := template.

Go Web 示例: 资源和文件

资源和文件 此示例将展示如何从特定目录提供静态文件,如 CSS、JavaScript 或图像。 1 2 3 4 5 6 7 8 9 10 11 // static-files.go package main import "net/http" func main() { fs := http.FileServer(http.Dir("assets/")) http.Handle("/static/", http.StripPrefix("/static/", fs)) http.ListenAndServe(":8080", nil) } $ tree assets/ assets/ └── css └── styles.