package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// 创建一个默认的路由引擎
r := gin.Default()
//配置路由
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "值:%v", "你好gin")
})
r.GET("/news", func(c *gin.Context) {
c.String(http.StatusOK, "我是新闻页面 111")
})
r.POST("/add", func(c *gin.Context) {
c.String(http.StatusOK, "这是一个post--主要用于增加数据")
})
r.PUT("/edit", func(c *gin.Context) {
c.String(200, "这是一个put请求 主要用于编辑数据")
})
r.DELETE("/delete", func(c *gin.Context) {
c.String(200, "这是一个DELETE请求 用于删除数据")
})
// r.Run() 启动 HTTP 服务,默认在 0.0.0.0:8080 启动服务
r.Run(":8000") //启动一个web服务
}
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Article struct {
Title string `json:"title"`
Desc string `json:"desc"`
Content string `json:"content"`
}
func main() {
r := gin.Default()
//配置模板的文件
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.String(200, "值:%v", "首页")
})
r.GET("/json1", func(c *gin.Context) {
c.JSON(200, map[string]interface{}{
"success": true,
"msg": "你好gin",
})
})
r.GET("/json2", func(c *gin.Context) {
c.JSON(200, gin.H{
"success": true,
"msg": "你好gin--22",
})
})
r.GET("/json3", func(c *gin.Context) {
a := &Article{
Title: "我是一个标题",
Desc: "描述",
Content: "测试内容",
}
c.JSON(200, a)
})
//响应Jsonp请求
// http://localhost:8080/jsonp?callback=xxxx
// xxxx({"title":"我是一个标题-jsonp","desc":"描述","content":"测试内容"});
r.GET("/jsonp", func(c *gin.Context) {
a := &Article{
Title: "我是一个标题-jsonp",
Desc: "描述",
Content: "测试内容",
}
c.JSONP(200, a)
})
r.GET("/xml", func(c *gin.Context) {
c.XML(http.StatusOK, gin.H{
"success": true,
"msg": "你好gin 我是一个xml",
})
})
r.GET("/news", func(c *gin.Context) {
//r.LoadHTMLGlob("templates/*")
c.HTML(http.StatusOK, "news.html", gin.H{
"title": "我是后台的数据",
})
})
r.GET("/goods", func(c *gin.Context) {
c.HTML(http.StatusOK, "goods.html", gin.H{
"title": "我是商品页面",
"price": 20,
})
})
r.Run()
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
<br>
{{.price}}
<br>
<h5>html的数据</h5>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
</body>
</html>
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Article struct {
Title string
Content string
}
func main() {
r := gin.Default()
//加载模板
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "首页",
})
})
r.GET("/news", func(c *gin.Context) {
news := &Article{
Title: "新闻标题",
Content: "新闻详情",
}
c.HTML(http.StatusOK, "news.html", gin.H{
"title": "新闻页面",
"news": news,
})
})
r.Run()
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
<p>
{{.news.Title}}
</p>
<p>
{{.news.Content}}
</p>
</body>
</html>
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Article struct {
Title string
Content string
}
func main() {
r := gin.Default()
//加载模板 放在配置路由上面
r.LoadHTMLGlob("templates/**/*")
//前台
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "default/index.html", gin.H{
"title": "首页",
"msg": " 我是msg",
"score": 89,
"hobby": []string{"吃饭", "睡觉", "写代码"},
"newsList": []interface{}{
&Article{
Title: "新闻标题111",
Content: "新闻详情111",
},
&Article{
Title: "新闻标题222",
Content: "新闻详情222",
},
},
"testSlice": []string{},
"news": &Article{
Title: "新闻标题",
Content: "新闻内容",
},
})
})
r.GET("/news", func(c *gin.Context) {
news := &Article{
Title: "新闻标题",
Content: "新闻详情",
}
c.HTML(http.StatusOK, "default/news.html", gin.H{
"title": "新闻页面",
"news": news,
})
})
//后台
r.GET("/admin", func(c *gin.Context) {
c.HTML(http.StatusOK, "admin/index.html", gin.H{
"title": "后台首页",
})
})
r.GET("/admin/news", func(c *gin.Context) {
c.HTML(http.StatusOK, "admin/news.html", gin.H{
"title": "新闻页面",
})
})
r.Run()
}
{{ define "admin/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>这是后台首页</h2>
</body>
</html>
{{ end }}
{{ define "admin/news.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>后台新闻页面</h2>
</body>
</html>
{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "default/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
<!-- 定义变量 -->
{{$t := .title}}
<br>
<h4>
{{$t}}
</h4>
<!-- 条件判断 -->
{{if ge .score 60}}
<p>及格</p>
{{else}}
<p>不及格</p>
{{end}}
{{if gt .score 90}}
<p>优秀</p>
{{else if gt .score 80}}
<p>良好</p>
{{else if gt .score 60}}
<p>及格</p>
{{else}}
<p>不及格</p>
{{end}}
<!-- 循环遍历数据 -->
<ul>
{{range $key,$value:=.hobby}}
<li>{{$key}}----{{$value}}</li>
{{end}}
</ul>
<br>
<ul>
{{range $key,$value:=.newsList}}
<li>{{$key}}----{{$value.Title}}---{{$value.Content}}</li>
{{end}}
</ul>
<br>
<ul>
{{range $key,$value:=.testSlice}}
<li>{{$key}}----{{$value}}</li>
{{else}}
<li>数组中没有数据</li>
{{end}}
</ul>
<!-- with 解构结构体 -->
<p>{{.news.Title}}</p>
<p>{{.news.Content}}</p>
<br>
{{with .news}}
<p>{{.Title}}</p>
<p>{{.Content}}</p>
{{end}}
</body>
</html>
{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "default/news.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>{{.title}}</h2>
<p>
{{.news.Title}}
</p>
<p>
{{.news.Content}}
</p>
</body>
</html>
{{end}}
package main
import (
"fmt"
"html/template"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
type Article struct {
Title string
Content string
}
//时间戳转换成日期
func UnixToTime(timestamp int) string {
fmt.Println(timestamp)
t := time.Unix(int64(timestamp), 0)
return t.Format("2006-01-02 15:04:05")
}
func Println(str1 string, str2 string) string {
fmt.Println(str1, str2)
return str1 + "----" + str2
}
func main() {
// 创建一个默认的路由引擎
r := gin.Default()
//自定义模板函数 注意要把这个函数放在加载模板前
r.SetFuncMap(template.FuncMap{
"UnixToTime": UnixToTime,
"Println": Println,
})
//加载模板 放在配置路由上面
r.LoadHTMLGlob("templates/**/*")
//配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录
r.Static("/static", "./static")
//前台
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "default/index.html", gin.H{
"title": "aaa",
"msg": " 我是msg",
"score": 89,
"hobby": []string{"吃饭", "睡觉", "写代码"},
"newsList": []interface{}{
&Article{
Title: "新闻标题111",
Content: "新闻详情111",
},
&Article{
Title: "新闻标题222",
Content: "新闻详情222",
},
},
"testSlice": []string{},
"news": &Article{
Title: "新闻标题",
Content: "新闻内容",
},
"date": 1629423555,
})
})
r.GET("/news", func(c *gin.Context) {
news := &Article{
Title: "新闻标题",
Content: "新闻详情",
}
c.HTML(http.StatusOK, "default/news.html", gin.H{
"title": "新闻页面",
"news": news,
})
})
//后台
r.GET("/admin", func(c *gin.Context) {
c.HTML(http.StatusOK, "admin/index.html", gin.H{
"title": "后台首页",
})
})
r.GET("/admin/news", func(c *gin.Context) {
c.HTML(http.StatusOK, "admin/news.html", gin.H{
"title": "新闻页面",
})
})
r.Run()
}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "public/page_footer.html" }}
<h1>
我是一个公共的底部
</h1>
{{end}}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "public/page_header.html" }}
<h1>
我是一个公共的标题---{{.title}}
</h1>
{{end}}
{{ define "admin/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>这是后台首页</h2>
</body>
</html>
{{ end }}
{{ define "admin/news.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>后台新闻页面</h2>
</body>
</html>
{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "default/index.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="/static/css/base.css">
</head>
<body>
{{template "public/page_header.html" .}}
<img src="/static/images/node.jpg" alt="">
<h2>{{.title}}</h2>
<!-- 定义变量 -->
{{$t := .title}}
<br>
<h4>
{{$t}}
</h4>
<!-- 条件判断 -->
{{if ge .score 60}}
<p>及格</p>
{{else}}
<p>不及格</p>
{{end}}
{{if gt .score 90}}
<p>优秀</p>
{{else if gt .score 80}}
<p>良好</p>
{{else if gt .score 60}}
<p>及格</p>
{{else}}
<p>不及格</p>
{{end}}
<!-- 循环遍历数据 -->
<ul>
{{range $key,$value:=.hobby}}
<li>{{$key}}----{{$value}}</li>
{{end}}
</ul>
<br>
<ul>
{{range $key,$value:=.newsList}}
<li>{{$key}}----{{$value.Title}}---{{$value.Content}}</li>
{{end}}
</ul>
<br>
<ul>
{{range $key,$value:=.testSlice}}
<li>{{$key}}----{{$value}}</li>
{{else}}
<li>数组中没有数据</li>
{{end}}
</ul>
<!-- with 解构结构体 -->
<p>{{.news.Title}}</p>
<p>{{.news.Content}}</p>
<br>
{{with .news}}
<p>{{.Title}}</p>
<p>{{.Content}}</p>
{{end}}
<br>
<!-- 预定义函数 (了解) -->
{{len .title}}
<br>
<br>
<!-- 自定义模板函数 -->
{{.date}}
<br>
<br>
{{UnixToTime .date}}
<br>
<br>
{{Println .title .msg}}
<br> <br>
{{template "public/page_footer.html" .}}
</body>
</html>
{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->
{{ define "default/news.html" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="static/css/base.css">
</head>
<body>
{{template "public/page_header.html" .}}
<h2>{{.title}}</h2>
<p>
{{.news.Title}}
</p>
<p>
{{.news.Content}}
</p>
<br>
<br>
{{template "public/page_footer.html" .}}
</body>
</html>
{{end}}