golang

分类下相关文章

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 ...

阅读全文...

cannot use variable (type interface {}) as type int in assignment: need type assertion

在使用 golang gin 时,通过 context get 获取的值在赋值给一个整型变量时,报错 cannot use variable (type interface {}) as type int in assignment: need type assertion 代码模拟如下: package main import "fmt" func main() { var tmp interface{} var i int tmp = 1 i = tmp fmt.Println(i) } 报错的代码行是 i = tmp 那行。 可见,interfac ...

阅读全文...

golang 判断目录不存在时,新建目录

例如,我想在当前目录下新建一个 public 目录。前提是这个目录不存在。 实现代码 path := "public" if _, err := os.Stat(path); os.IsNotExist(err) { os.Mkdir(path, os.ModePerm) } os.ModePerm 对应的目录权限 目录创建成功后,可以看到,其权限是 drwxrwxrwx 参考:https://golang.org/pkg/os/ type FileMode uint32 const ModePerm FileMode = 0777 // Unix permi ...

阅读全文...

golang gin 上传文件报错:request Content-Type isn't multipart/form-data

在使用 golang gin 实现一个文件上传并解析的功能时,报错: request Content-Type isn't multipart/form-data 模板代码 <form action="/upload" method="post"> <input type="file" class="form-control-file" id="csv" name="csv"> <button type=&qu ...

阅读全文...

go run 报错 undefined,但是 go build 成功

在本地调试一个 golang 项目,使用 go run 指定文件,会报错 undefinded 某变量。 而这个变量是在同一个 package,不同文件中定义的。 > go run baidu_log_server.go # command-line-arguments ./baidu_log_server.go:57:17: undefined: Generators 但是,如果直接 go build 却不报任何错误,编译成功。 解决方法 最简单的方法: go run ./ 或者指定多个 go 文件 go run a.go b.go ...

阅读全文...

使用 golang 的交叉编译生成 windows 可执行文件

需求场景 公司内部的 IT 似乎不会使用 Linux,所以要交接的一个 golang gin 服务,我就不太敢部署在 Linux 上,想试试能否生成 windows 版本,然后设置成开机自启动,这样就不用操心了。 即,在我的 Windows 10 WSL Ubuntu 开发环境下,编译出可以在 Windows 10 上运行的 Golang 二进制文件。 交叉编译 英文为 Cross Compiling。 交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。 还是翻译成“跨平台编译”比较好,“交叉”这个词太难理解了。 跨平台编 ...

阅读全文...

golang 框架 goframe 与 gin 的对比

用了一段时间 gin,突然感觉有点简陋。想尝试一下其他 golang 框架,goframe 号称对标 laravel 和 django,这点是我需要的。看了一遍 goframe 的文档,确实非常像 laravel,连 http client 都内置了。从文档可以看出来,作者经验非常丰富,也很心细,学到了不少实战技巧。 goframe 吸引我的地方 项目代码组织规范 分组路由:后来发现这个功能 gin 有 i18n orm 热重启 日志写入文件:原来 gin 也自带了。。。 登陆注册 docker 的应用 微信群的讨论质量相对其他群高很多,可能都是项目老手吧 我需要快速的 CRUD 能力,及 ...

阅读全文...