golang

分类下相关文章

sql.NullTime 计算时间差

定了一个类型,实际上是 sql.NullTime。我想计算当前时间与其值的时间差。 type NullTime struct { sql.NullTime } sql.NullTime https://pkg.go.dev/database/sql#NullTime type NullTime struct { Time time.Time Valid bool // Valid is true if Time is not NULL } NullTime 实际上是个 struct,时间值存储在 Time 字段中。 time.Time 如何计算时间差 https://stackov ...

阅读全文...

为 golang 项目添加 Makefile

使用 Makefile 的好处 可以管理多个任务的命令。例如,build & run,test。 否则单单一个 go test -v ./... 就很难记住。 何况还会有很多需要记录的命令: go test build & run scp 到服务器,并重启服务 每个功能一个 shell 脚本,会显得很杂乱。放到一个统一的文件中,就非常方便了。 如果没有 Makefile 文件会怎样 > make make: *** No targets specified and no makefile found. Stop. 参考项目 golang gin 项目的 Make ...

阅读全文...

golang gorm 2 中使用 lock for update 锁

查了一下 golang gorm 2 确实支持 lock for update。文档: https://gorm.io/zh_CN/docs/advanced_query.html#Locking-FOR-UPDATE db.Clauses(clause.Locking{Strength: "UPDATE"}).Find(&users) 但由于 for update 必须在事务中使用,所以,还需要看看 gorm 事务的写法。 lock for update 与 share 的区别 参考 使用 Laravel sharedLock 与 lockForUpdate 进 ...

阅读全文...

Golang Gorm Error 1292: Incorrect datetime value: '0000-00-00' for column

报错内容 在用 Golang Gorm 更新 MySQL 一条数据时,报错: Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1 UPDATE `repair` SET `created_at`='0000-00-00 00:00:00',`updated_at`='2021-06-03 17:03:31.359' WHERE `id` = 2 报错代码 我是将 Antd Pro Web 管理后台的数据通过 API 接口发送给后台 Golang 接口,进行更新。 由于前端不需要 ...

阅读全文...

Goland Gin 将上传的图片文件转存到七牛 CDN

安装七牛 golang sdk go get -u github.com/qiniu/go-sdk/v7 go get github.com/qiniu/go-sdk/v7/storage@v7.9.5 参考七牛官方文档: https://developer.qiniu.com/kodo/sdk/go zone 的可选值 参考这里 https://github.com/qiniu/go-sdk/blob/master/storage/zone.go 上传七牛 前端看到的上传格式: Content-Disposition: form-data; name="file"; f ...

阅读全文...

golang 生成 UUID

实现 golang 向七牛云 CDN 上传图片文件的功能,需要为图片生成一个唯一的文件名, 所以找了一下 Golang 生成 UUID 的实现。 安装依赖 go get github.com/google/uuid 使用方法 import "github.com/google/uuid" uuid := uuid.New() key := uuid.String() 生成的 UUID 数据格式 4738c1d9-04ce-46a5-a49f-7cc2b9f061e2 官方文档 https://pkg.go.dev/github.com/google/uuid ...

阅读全文...

Golang 将日期字符串转换为星期几

由于 Golang Weekday 返回的是日期的英文周几,需要加个 Map 转换为中文。 package main import ( "fmt" "time" ) var WeekDayMap = map[string]string{ "Monday": "周一", "Tuesday": "周二", "Wednesday": "周三", "Thursday": "周四&quot ...

阅读全文...

GORM 1 升级 GORM 2 的修改点

在写公司内部的一个办公系统时,想趁机把 Gorm 版本升级一下。 大部分靠 go build 的编译错误提示,修改完成。 依赖修改 由 github.com/jinzhu/gorm 变更为 gorm.io/gorm cannot use "mysql" (type string) as type gorm.Dialector in argument to gorm.Open - DB, err = gorm.Open("mysql", dataSourceName) + DB, err = gorm.Open(mysql.Ope ...

阅读全文...

golang 升级 1.16.3 之后,编译报错 missing go.sum entry for module providing package

问题现象 在开发机上升级到了最新 golang 1.16.3 版本,在为一个基于 golang 1.13 的历史项目添加 excel 依赖包后 go get github.com/360EntSecGroup-Skylar/excelize/v2 编译报错: go build ../../../golang/pkg/mod/golang.org/x/crypto@v0.0.0-20201012173705-84dcc777aaee/blake2b/blake2bAVX2_amd64.go:9:8: missing go.sum entry for module providing pack ...

阅读全文...

新装系统在 VIM 保存 Golang 文件时一直卡在 vim-go: initializing gopls

一台新装系统,先安装了 VIM,并且安装了 vim-go 插件。 之后才安装的 Golang,版本 1.16.3。 但是在使用 VIM 编辑 Golang 代码文件时,一保存就显示 vim-go: initializing gopls 卡在这里不响应了。 在 Github 上找到一个解决方法: VIM 中执行 :GoInstallBinaries 耐心等待一系列工具安装完毕,再次用 VIM 编辑就不会报这个错了。 参考 https://github.com/fatih/vim-go/issues/2603 ...

阅读全文...

golang gin jwt 管理微信小程序的登录态

是否存在伪造用户 token 的可能 不容易实现。 虽然 jwt 是明文的,前面两部分通过 base64 解码即可看到明文。假设,里面存储了用户 id 或者 用户的 open id,但是即便被终端用户解密出结构。但是第三部分里的校验位 signature 由于是在服务器端加密生成的,密钥也在服务端,所以不容易实现伪造。 jwt 的结构 这个不急于验证,等我实现了功能之后,用自己生成的 token 来分析一下结构。 例如,接口返回一个 token: {data: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2M…I6MX0.yIZ ...

阅读全文...

golang 中使用时间戳作为用户 id 的可行性

有一个简单的使用场景,即用户在一个设备上,会反复添加条目,例如一个 TODO 项。除了自增 ID 之外,我还想加上另外一个唯一标识。由于同一时间,用户只能添加一条记录,所以不会出现并发冲突的问题。 能想到的最简单方案就是使用时间戳。于是调研了一下可行性。 golang int 的值范围 int32: -2147483648 到 2147483647。大概 21 亿 int64: -9223372036854775808 到 9223372036854775807 以秒为单位的时间戳的数值大小 但是用时间戳,会遇到 2038 问题,即 2038 后,时间戳会超出 int32 的存储范围。虽然 ...

阅读全文...

goadmin form 一行多个 input

文档还没 最新版本可以使用 AddRow https://github.com/GoAdminGroup/go-admin/blob/master/plugins/admin/modules/table/generators.go#L1439 参考下这里 https://demo.go-admin.cn/admin/info/generate/new 是对应这个页面的代码 ...

阅读全文...

golang 实现敏感词过滤

在提交微信小程序审核时,必须要做用户提交 UGC 内容的敏感词检测,否则会导致审核失败。 获取 access token https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 7200 秒内过期。 如何全局共享 tok ...

阅读全文...

gorm 预加载的使用场景

背景 我正在用 golang gin 写的一个统计人数小程序后台服务涉及两个大数据表 用户表 活动参与的用户表 在查询一个活动参与的所有用户信息时,需要同时用到这两个表。考虑到运营一段时间之后,这两个表的数据量不可控,所有不打算使用联表查询。而采用 先查询活动对应的用户 id 集合 然后 where in ids 来查询对应的用户信息 如果用 golang 手写这个逻辑,还挺啰嗦的。在翻看 gorm 文档时,发现 gorm 支持预加载功能,这个功能类似 laravel eloquent 里的 Eager Loading 功能 (相对于 lazy loading)。 预加载的使用方法 t ...

阅读全文...