HTTP 路由
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/book", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"method": "GET",
})
})
r.POST("/book", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"method": "POST",
})
})
r.PUT("/book", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"method": "PUT",
})
})
r.DELETE("/book", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"method": "DELETE",
})
})
err := r.Run(":9090")
if err != nil {
return
}
}
使用 Gin 框架定义了四个 HTTP 路由,分别对应 HTTP GET、POST、PUT 和 DELETE 请求。
当用户访问 /book 路径并发送不同类型的 HTTP 请求时,服务器会返回相应的 JSON 对象,其中包含一条消息,表示请求的类型。
不使用路径名
/book来区分 HTTP 请求
HTML 渲染
- 创建模板
*.tmpl
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title> Hello </title>
</head>
<body>
{{ with .uu1 }}
<p>Hello {{ .Name }} {{ .Age }} {{ .Gender }}</p>
{{ end }}
{{ if lt .uu1.Age 20}}
未成年
{{ else }}
成年人
{{ end }}
{{ range $idx, $hb := .hobby }}
<p> {{ $idx }} - {{ $hb }} </p>
{{ else }}
空空如也
{{ end }}
</body>
</html>
-
解析模板
ParseFiles函数会读取指定的模板文件,并将其解析为模板对象
-
渲染模板
Execute渲染一个模板- 第一个参数是一个
io.Writer类型的变量,表示要将模板的输出写入到哪里; - 第二个参数是一个
interface{}类型的变量,表示要传递给模板的数据。
package main
import (
"fmt"
"html/template"
"net/http"
)
type U struct {
Name string
Age int
Gender string
}
func sayHello(w http.ResponseWriter, r *http.Request) {
// 解析模板
t, err := template.ParseFiles("./learn/hello.tmpl")
if err != nil {
fmt.Println("模板解析错误:%v", err)
return
}
// 渲染模板
u1 := U{
"奥特曼",
18,
"性别男,爱好女",
}
hobbyList := []string{
"唱跳",
"rap",
"篮球",
}
err = t.Execute(w, map[string]interface{}{
"uu1": u1,
"hobby": hobbyList,
})
if err != nil {
fmt.Println("模板渲染错误:%v", err)
}
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9090", nil)
if err != nil {
fmt.Println("HTTP server start failed, err:%v", err)
return
}
}