Gin - web框架 | 青训营

86 阅读1分钟

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 GETPOSTPUTDELETE 请求。 当用户访问 /book 路径并发送不同类型的 HTTP 请求时,服务器会返回相应的 JSON 对象,其中包含一条消息,表示请求的类型。

不使用路径名 /book 来区分 HTTP 请求

HTML 渲染

  1. 创建模板 *.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>
  1. 解析模板

    • ParseFiles 函数会读取指定的模板文件,并将其解析为模板对象
  2. 渲染模板

    • 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
	}
}