Gin开发03
来源:互联网 发布:python读txt文件 编辑:程序博客网 时间:2024/06/07 00:50
Gin开发-3
这一篇文章开始,着手编写一个Gin Web System
。内容包含:
后台服务:
1. Markdown文件渲染为Blog,支持标签分类等定义和评论。
2. 在线API服务,提供付费音乐下载&视频VIP解析接口。提供Blog管理API。
3. 分享模块。提供软件下载和介绍等。(一般功能,可以用1替代)
4. 文件管理。使用SSH或者KO管理。
前台展示:
1. 服务器端[Web]。UIKIT+jQuery,提供页面。
2. 客户端[App]。UIKIT+Electron制作客户端。
3. 远程管理[Web]。syncthing同步。webconsole提供Web SSH。
项目架构
工程目录结构
.├── data│ ├── blogs│ └── config.ini├── src├── main.go├── statics│ ├── css│ ├── images│ └── js└── templates └── blog
最终形态如上,src是核心代码,main.go是程序入口。其他目录与最终的exe共同组成可执行项目。
基础代码
// main.gopackage mainimport ( "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.gopackage engineimport ( "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", func(c *gin.Context) { c.Header("Content-Type", "application/json; charset=utf-8") c.JSON(http.StatusOK, gin.H{"msg": "dong"}) }) AppEngine.Run(":8090")}
Blog模块
Blog模块核心功能是提供MD文档的解析和渲染。
1. 枚举制定目录下的文件夹和文件,将类别和标签暂存到内存。
2. 访问网页时,渲染MD内容到Web。
3. 提供评论功能。
4. 提供API访问能力。
见项目 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…也是各有利弊,没有所谓的最好的,框架都差不多,够用就好,需要理性看待。
- Gin开发03
- Gin开发01
- Gin开发02
- golang开发框架之gin
- gin框架
- 银河 Gin
- Gin安装
- gin中的断言写法
- Gin Web框架简介
- gin url树
- baby-gin 算法
- gin使用gzip压缩
- Gin框架初识
- Gin 框架源码笔记
- golang-gin框架笔记
- Gin html模板引用
- Go语言web框架 gin
- 【pg_rman】备份GIN索引bug
- Gin开发02
- 简单比较init-method,afterPropertiesSet和BeanPostProcessor
- 一个很好的开源图像处理软件--imageJ (2
- 解析JSON数据
- Tensorflow[基础篇]——LSTM的理解与实现
- Gin开发03
- 给定字符串str1和str2,求str1中子串含有str2所有字符的最小子串长度
- MySQL基础(三)
- Linux学习笔记(1) -- 初识Linux
- python初学笔记1
- 大数相乘(高精度)
- Error:Jack is required to support java 8 language features.
- React Native Text组件之点击和长按事件
- 自定义View系列教程(从基础绘制讲起哦~~~~~~~)