Gin开发03
Gin开发-3这一篇文章开始,着手编写一个 前台展示: 项目架构工程目录结构.
├── data
│ ├── blogs
│ └── config.ini
├── src
├── main.go
├── statics
│ ├── css
│ ├── images
│ └── js
└── templates
└── blog
最终形态如上,src是核心代码,main.go是程序入口。其他目录与最终的exe共同组成可执行项目。 基础代码// main.go
package main
import (
"fmt"
"gindemo1/engine"
)
var (
App_Version = "R1.0"
)
func main() {
fmt.Println("Gin Web System:",App_Version)
fmt.Println("Load Config...")
fmt.Println("Start Blog Server...")
fmt.Println("Start API Server...")
engine.Run()
}
// engine/main.go
package engine
import (
"net/http"
"github.com/gin-gonic/gin"
)
var (
AppEngine *gin.Engine = nil
)
func init() {
AppEngine = gin.Default()
// favicon.ico
AppEngine.StaticFile("/favicon.ico","./statics/favicon.ico")
// statics
AppEngine.Static("/statics","./statics")
}
func Run() {
// urls
AppEngine.GET("/",func(c *gin.Context) {
c.Header("Content-Type","text/html; charset=utf-8")
c.String(http.StatusOK,"<h1>%v</h1>","Hello")
})
AppEngine.GET("/ping","application/json; charset=utf-8")
c.JSON(http.StatusOK,gin.H{"msg": "dong"})
})
AppEngine.Run(":8090")
}
Blog模块Blog模块核心功能是提供MD文档的解析和渲染。 见项目 GinWebSystem 坑记录Gin路由支持它按照树形结构进行路径匹配,所以,有一些匹配规则无法实现,比如: // 无法匹配的场景
/api/:tag/list
/api/:tag/view
// 只能这种的
/api/list/:tag
/api/view/:tag
所以,它支持前导匹配,更无法显示正则匹配一类的功能。也由于这个限制,它的路由性能很好,有舍有得吧。 Gin模版模版本身限制很严,通过template使用的块,必须在其他文件中define,否则编译不通过。还有,文件模版不像Django一类的一样,多个同时使用,必须手工指定名字和对应的文件。 还有,在模版中使用参数,有一些必须注意的事项: // 下面的 md_tag 会提示找不到的错误
{{rang $k,$v := items}}
<div>{{ .md_tag }}</div> // 假设 md_tag 通过模版传递过来的变量 {{end}} // 变通做法 {{ $tag := .md_tag }} {{rang $k,$v := items}} <div>{{ $tag }}</div> // 假设 md_tag 通过模版传递过来的变量
{{end}}
即,使用range和with时,无法使用模版传递过来的变量,必须等待end或者声明其他变量传递。 基础功能没有配置文件管理,db管理… 总结Gin作为一个中规中矩的Web框架,完成了很多基础的功能,也有它的“弊端”,但是不失为一个优秀的学习对象。还有如Beego、Echo…也是各有利弊,没有所谓的最好的,框架都差不多,够用就好,需要理性看待。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |