golang入门实战(二)
golang入门实战
- github
- 接上篇
- 接口数据时间格式
- token校验中间件
- 多平台打包
- 未完待续
github
项目完整代码–github
接上篇
golang入门实战(一)
接口数据时间格式
在上篇 整合mysql ---gorm框架部分 返回数据的时间格式是带时区的 一般我们需要把他转成 2006-01-02 15:04:05 这种格式
http://localhost:1016/user/save?username=aaa
{“code”:200,“data”:{“ID”:3,“CreatedAt”:“2023-02-13T10:40:26.2750692+08:00”,“UpdatedAt”:“2023-02-13T10:40:26.2750692+08:00”,“DeletedAt”:null,“Username”:“aaa”,“Password”:“”,“Tel”:“”}}
定义一个时间类型,来重写时间格式为我们需要的格式
/model/BaseModel.go
package modelimport ("database/sql/driver""fmt""time"
)type BaseModel struct {ID uint `gorm:"primary_key"`CreatedAt *FormatTimeUpdatedAt *FormatTimeDeletedAt *FormatTime `sql:"index"`
}type FormatTime time.Timefunc (t *FormatTime) MarshalJSON() ([]byte, error) {tTime := time.Time(*t)return []byte(fmt.Sprintf("\"%v\"", tTime.Format("2006-01-02 15:04:05"))), nil
}func (t FormatTime) Value() (driver.Value, error) {tTime := time.Time(t)return tTime.Format("2006-01-02 15:04:05"), nil
}func (t *FormatTime) Scan(v interface{}) error {switch vt := v.(type) {case time.Time:*t = FormatTime(vt)}return nil
}
应用
/model/User.go把原来使用的 gorm.Model 替换为我们的BaseModel
package modeltype User struct {BaseModelUsername stringPassword stringTel string
}
- 测试
postman请求http://localhost:1016/user/save{"code": 200,"data": {"ID": 9,"CreatedAt": "2023-02-14 17:28:59","UpdatedAt": "2023-02-14 17:28:59","DeletedAt": null,"Username": "asd","Password": "","Tel": ""},"msg": "success"}
token校验中间件
大部分项目接口中,对接口访问是有身份&权限校验的
/middleware/TokenMiddleware.go
package middlewareimport ("github.com/gin-gonic/gin""pro/response""strings"
)func TokenMiddleware() gin.HandlerFunc {return func(c *gin.Context) {//检查放行白名单url := c.Request.RequestURIif CheckWhitelist(url) {return}//验证tokentoken := c.GetHeader("token")if CheckToken(token) {return}response.Fail(c, "token失效")//终止请求执行c.Abort()}
}// 放行白名单 配置具体接口/群组
var Whitelist = []string{"/user/ggt","/rel/",
}// 检查接口是否需要放行
func CheckWhitelist(url string) bool {for _, item := range Whitelist {if url == item || (strings.HasSuffix(item, "/") && strings.HasPrefix(url, item)) {return true}}return false
}// 校验token token校验及权限校验在此处处理
func CheckToken(token string) bool {if token == "123" {return true}return false
}
- main入口 启用中间件
func Router() *gin.Engine {//禁用gin输出gin.DefaultWriter = io.Discardr := gin.Default()//文件上传大小r.MaxMultipartMemory = 8 << 20 // 8 MiBr.Use(//异常处理middleware.RecoveryMiddleware(),//跨域middleware.CORSMiddleware(),//请求参数处理middleware.RequestParamsMiddleware(),//日志middleware.LogMiddle(),//tokenmiddleware.TokenMiddleware(),)return StartRouter(r)
}
- 路由配置
func StartRouter(r *gin.Engine) *gin.Engine {//用户user := r.Group("/user"){user.POST("/save", controller.SaveUser)user.POST("/del", controller.DelUser)user.POST("/get", controller.GetUser)user.POST("/ggt", controller.GetUser)user.GET("/gg", controller.GG)}rel := r.Group("/rel"){rel.POST("/get", controller.GetUser)}return r
}
测试
postmanhttp://localhost:1016/user/get{"code": 400,"data": null,"msg": "token失效"}http://localhost:1016/user/ggt{"code": 200,"data": {"ID": 0,"CreatedAt": null,"UpdatedAt": null,"DeletedAt": null,"Username": "","Password": "","Tel": ""},"msg": "success"}http://localhost:1016/rel/get{"code": 200,"data": {"ID": 0,"CreatedAt": null,"UpdatedAt": null,"DeletedAt": null,"Username": "","Password": "","Tel": ""},"msg": "success"}
多平台打包
goreleaser安装
选择下方Assets中goreleaser_Windows_x86_64.zip下载解压后配置环境变量,将路径添加到path中 如: E:\goreleaser_Windows_x86_64
打包配置
与main.go同级别/.goreleaser.yaml
# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.combefore:hooks:# You may remove this if you don't use go modules.- go mod tidy# you may remove this if you don't need go generate- go generate ./...
builds:- env:- CGO_ENABLED=0goos:- linux
# - windows
# - darwin
archives:- replacements:
# darwin: Darwinlinux: Linux
# windows: Windows
# 386: i386amd64: x86_64
checksum:name_template: 'checksums.txt'
snapshot:name_template: "{{ incpatch .Version }}-next"
changelog:sort: ascfilters:exclude:- '^docs:'- '^test:'# modelines, feel free to remove those if you don't want/use them:
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
# vim: set ts=2 sw=2 tw=0 fo=cnqoj
打包
goland打开terminal 执行以下命令goreleaser --snapshot --skip-publish --rm-dist等待打包完成 包会成为在/dist目录/dist/golang_linux_amd64_v1/pro
启动
chmod +x pronohup ./pro>log.log 2>&1 &
未完待续
golang入门实战(二)相关推荐
- 【Golang入门】二、Go语言快速开发
需求:开发一个hello.go程序,要求输出"hello world". 采用VScode进行Golang的开发,因此这一系列博客的代码均在VScode编译器上编译实现. 这里我们 ...
- 怎么加载csv_python爬虫入门实战(四)!爬取动态加载的页面
今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...
- python xpath入门_python爬虫入门实战(三)!xpath 和 csv!
最近有小伙伴说正则表达式学不懂?那有什么替代方案呢?一起往下看吧! 在前两篇文章我们已经学了一些基本技巧.但是之前都是用正则表达式来解析内容的,可能有小伙伴对正则表达式不理解,于是乎,我找到一个相对好 ...
- python爬虫动态加载_python爬虫入门实战(四)!爬取动态加载的页面!
今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...
- layui 如何动态加载局部页面_python爬虫入门实战(四)!爬取动态加载的页面!
今天的主题是爬取动态网页的经验分享,以cocos论坛为例子进行分享.(官方不会打我吧 ) 配置环境 为什么选择cocos论坛呢?因为自己在浏览论坛时,发现标题内容会随着滚动条的位置而动态添加. 环境: ...
- 从零开始的Flutter入门实战(二)
目录 前言 一.Column布局 1.创建一个Column 2.添加Container 3.运行验证 二.Row布局 1.将Column改成Row 三.Column布局和Row布局的混合使用 1.Si ...
- MATLAB App Designer入门实战(二)
为了方便汇总,这里的目录是接着第一篇来的. 系列文章目录: MATLAB 手把手带你制作第一个APP designer程序(电子词典) MATLAB App Designer入门实战(一) MATLA ...
- python游戏开发框架_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)...
游戏是为了什么而存在的?Bingo,是为了娱乐~ 在这个最高主题之前,技术啥的什么都无所谓! 前一段时间,有位姓刘的网友用Pygame写了个俄罗斯方块,在用py2exe打包的时候遇到一些问题,和我交流 ...
- python用户界面游戏_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)...
我们接着来做这个整死人不偿命的俄罗斯方块. 代码组织和名词约定 上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下: 其中,lib为py ...
最新文章
- 网络与服务器编程框架库 acl_3.0.13 发布
- C 语言编程 — 头文件
- 一上来,就问原理,问上亿(MySQL)大表的索引优化...
- php批量生成200条8位兑换码
- 功能测试工作的一点总结
- Lua 学习笔记(一)环境搭建
- :未来5-10年,NLP将走向成熟
- SimBERTv2来了!融合检索和生成的RoFormer-Sim模型
- python-小数点保留位数问题
- 域名解析中“TTL”是什么意思?
- c语言用什么操作系统,用C语言写关于操作系统的一个问题。
- 基于matlab边缘提取的几种方法的比较
- HDU-5857-Median
- IDEA(或Android Studio)切换Git分支时弹出Git Checkout Problem
- 安迪的第一个字典(Andy‘s First Dictionary,UVa10815)
- ftp下载工具绿色版,ftp下载工具有绿色版的吗?教程详解
- 考研英语 - word-list-12
- 003_wz_wed_DL_课程一第二周编程题(Logistic回归;神经网络思维;)
- 沐曦加入龙蜥社区,聚焦技术创新,繁荣开源生态
- 知识点滴 - 电源适配器接头的极性
热门文章
- BIM用C语言编程,实现BIM技术的三个重要方面是()。A.BIM的建立B.BIM的应用C.BIM的管理D.BIM的粒度E.BIM的概念...
- 梦幻逊克,雾凇的故乡,摄影家的天堂
- Numpy 怎么把arange ()产生的列表 变成一个行向量或者列向量
- (挺好)最详细的Yolov3边框预测分析
- 半夜仍在加班的我,知道了老板跟女友都在跑步。
- subprocess用法,官方文档
- 计算机音乐数字乐谱生僻字,《生僻字》歌曲简谱
- ios系统删除的短信如何恢复?
- 关于java多参数的传值问题解析
- OpenCV—画直角边的直线(粗线)