前段时间开了个小博客,今天有点时间总结一下http://www.milu.blog,路过的朋友不要错过它。Golang在学习和自慰。这个看似不复杂的小东西,已经搞了2个多月了。在早期的技术选型中,作为一个对前端稍有了解的菜鸟,我做的大部分都是前端。我没有选择流行的技术栈,而是选择了最原始的技术栈。这样做的目的是,一方面希望自己能把主要精力放在Golang开发上,在完成阶段小目标的同时尽量不要沉迷于首页的细节。快速修复,快速更新,让用户和报告问题的小伙伴能够及时响应。即便是抱着这样的目标,最后还是尝试了三套不同风格的模板展示在前台,费了好大的功夫。有兴趣的朋友可以试试。当然,这些都是在Pongo2模板引擎的配合下完美实现的。直接更新单个页面不需要重启后台服务。如果切换模板,则需要重新启动服务。本项目的初衷是通过一次基础代码练习,巩固对Golang基础知识的掌握,同时衔接所学的其他知识,用最简单的开发方式快速完成开发并发布上线。由于侧重于Golang,所以前端页面采用简单的服务端方式渲染,没有npm、webpack、安装依赖、压缩,粗糙简单。后台管理页面在Layuimini的基础上采用iframe+vue混合开发方式。原有通过iframe的多标签功能和基本布局框架没有改变,业务页面直接引入了vue和element。好处是省去了上线前安装依赖包和打包的步骤。缺点是不能支持复杂的业务。可选的技术栈有:前台可以使用Nuxt3+ElementPlus、Nextjs+Antd等,后台管理可以使用Vue3+Arco、React+Antd等。仓库地址:http://gitee.com/jikey/elk-博客1.相关介绍1.1基本介绍Elkblog起名是为了方便搜索引擎和Github搜索,同时形成整个动物系列的开源项目。1.2技术栈1.2.1背景技术说明官网Golang-1.18开发语言https://go.dev/Gin-1.8.1GinWebFrameworkhttps://gin-gonic.com/zh-cn/docs/Mysql-5.7数据库https://www.mysql.com/cn/Gorm-1.9.16GolangORMhttps://gorm.io/zh_CN/docs/index.htmlJwtGolangjwthttps://github.com/golang-jwt/jwtPongo2-5Template引擎https://github.com/flosch/pongo2Logrus日志https://github.com/sirupsen/logrusBase64Captcha验证码https://github.com/mojocn/base64Captcha密码库https://golang.org/x/cryptoIniini文件库https://github.com/go-ini/iniGoment时间处理工具https://github.com/nleeper/gomentAir热更新工具https://github.com/cosmtrek/air1.2.1前端技术说明官网Vue-2.xProgressiveJavaScript框架https://cn.vuejs.org/v2/guide/Axios基于Promise的HTTP库https://github.com/axios/axiosElement-UI前端UI组件库https://element.eleme.io/Tinymce可视化HTML编辑器https://www.tiny.cloud/Fontawesome图标字体库http://www.fontawesome.com.cn/1.3开发工具系统工具官网Goland开发工具https://www.jetbrains.com/zh-cn/go/Navicat数据库管理工具https://www.navicat.com.cn/Atom源码阅读工具https://atom.io/CmderCmd替代工具[windows]https://cmder.net/Notepad2临时单文件编辑[windows]http://www.flos-freeware.ch/notepad2.htmlChrome调试工具https://www.google.com/intl/zh-CN/chrome/1.4文件结构整体结构参考世界上最漂亮的框架Laravel├─app//核心代码│├─controller//控制层││├─admin││└─home│├─database//数据库link│├─model//模型层│└─service//运行数据层├─config//配置文件├─pkg//所有工具文件│├─e//错误报告│├─hash//验证码│├─response//返回包│└─utils//工具库├─public//所有静态资源│├─admin│├─common│├─data│├─green│├─home│└─uploads├─routers//路由文件└─views//所有静态资源├─admin├─green//绿色主题模板├─default//默认模板└─home//常用模板Tips:Air需要热加载工具,因为go本身没有有热加载技术支持。没有太多选择。1、FreshFresh满足基本应用。每次保存文件时,都会生成或重新启动Web应用程序。不过这个工具已经很多年没有更新了,所以被弃用了。2、AirAir的优点也很突出:彩色日志输出、自定义构建或二进制命令、支持忽略子目录、支持启动后监听新目录等等。2.1Air的问题Air存在缓存问题。虽然在cmd中终止了Air,但是浏览器刷新程序还在运行。这时候就需要手动终止进程并重启。//找到PID,9888是端口号netstat-ano|findstr9888//kill进程,14172foundpidtaskkill/pid14172/f2.2Commandnotfounderror如果输入air报这个错,需要在系统的路径里面配置工程路径。比如项目在D:\go-project,那么路径中应该有一个:D:\go-project\binPongo2因为是前后端不分离的开发方式,模板引擎起着重要的作用,初选也看了很多。比如goview,quicktemplate仿ejs,herolikeejs等。最后选择Pongo2的原因是功能强大,简单易用,可以轻松实现不同模板子模板继承的需求。他的大体思路和语法与Jinja2和Django模板相似或基本相同。有Extends、Macro、Block、Include等强大的功能,如果有类似Django、Nunjucks的模板语法,上手基本不难。Pongo2文档没有那么详细。进一步了解需要看仓库源码Template_tests。问题,和Vue的valueboundarysymbols有冲突。两种解决方案:Vue标签换成v-html,例如:
