一、静态文件引入
目录结构
./main.go
文件:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
func index(c *gin.Context) {
c.HTML(http.StatusOK, "index/index.html", nil)
}
./templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
<div class="content">引入css静态文件</div>
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
./templates/static/css/index.css
文件:
.content {
color: crimson;
font-size: 24px;
margin: 100px auto;
}
./templates/static/js/jquery.min.js
可以去 jquery.com 官网下载:
运行结果:
二、数据渲染
1、字符串渲染
目录结构
main.go
文件:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
func index(c *gin.Context) {
name := "张三"
c.HTML(http.StatusOK, "index/index.html", gin.H{"name": name})
}
templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
<p>name是 {{.name}}</p>
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
运行结果:
2、结构体渲染
目录结构
main.go
文件:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// 创建结构体,结构名必须大写
type UserInfo struct {
Name string
Age, Height int
}
func index(c *gin.Context) {
// 结构赋值
User := UserInfo{"李四", 20, 180}
fmt.Print(User)
c.HTML(http.StatusOK, "index/index.html", gin.H{"User": User})
}
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
<p>名称是 {{.User.Name}}</p>
<p>年龄是 {{.User.Age}}</p>
<p>身高是 {{.User.Height}}</p>
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
运行结果:
3、数组渲染
目录结构
main.go
文件:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// 创建结构体,结构名必须大写
type UserInfo struct {
Name string
Age, Height int
}
func index(c *gin.Context) {
// 结构赋值
User := [2]UserInfo{
{"张三", 22, 120},
{"李四", 20, 180},
}
fmt.Print(User)
c.HTML(http.StatusOK, "index/index.html", gin.H{"User": User})
}
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
<h4>第一种遍历方式</h4>
{{ range .User }}
<p>
<span>{{ .Name }}</span>
<span>{{ .Age }}</span>
<span>{{ .Height }}</span>
</p>
{{ end }}
<h4>第二中遍历方式</h4>
{{ range $i, $v := .User }}
<p>
<span>{{ $i }}</span>
<span>{{ $v.Name }}</span>
<span>{{ $v.Age }}</span>
<span>{{ $v.Height }}</span>
</p>
{{ end }}
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
运行结果:
4、map渲染
目录结构
main.go
文件:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// map定义
type UserInfo = map[string]int
func index(c *gin.Context) {
// 赋值
User := UserInfo{
"张三": 1,
"李四": 2,
"哈哈": 3,
}
c.HTML(http.StatusOK, "index/index.html", gin.H{"User": User})
}
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
{{ range $i, $v := .User }}
<p>
<span>{{ $i }}</span>
<span>{{ $v }}</span>
</p>
{{ end }}
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
运行结果:
5、map+struct渲染:
目录结构
main.go
文件:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// 结构定义
type UserInfo struct {
Name string
Age, Height int
}
func index(c *gin.Context) {
// 结构赋值
User := map[int]UserInfo{
1: {"张三", 22, 120},
2: {"李四", 20, 180},
}
fmt.Print(User)
c.HTML(http.StatusOK, "index/index.html", gin.H{"User": User})
}
func main() {
r := gin.Default()
// 注册模板
r.LoadHTMLGlob("templates/views/**/*")
// 注册静态文件:参数1:别名、参数2:当前static文件目录,
r.Static("static", "./templates/static")
// 注册路由
r.GET("/index", index)
r.Run(":8080")
}
templates/views/index/index.html
文件:
{{ define "index/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="static/css/index.css">
</head>
<body>
{{ range $k, $v := .User }}
<p>
<span>{{ $k }}</span>
<span>{{ $v.Name }}</span>
<span>{{ $v.Age }}</span>
<span>{{ $v.Height }}</span>
</p>
{{ end }}
</body>
</html>
<script src="static/js/jquery.min.js"></script>
<script>
console.log("引入js静态文件")
</script>
{{ end }}
运行结果: