golang

分类下相关文章

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 能力,及 ...

阅读全文...

golang 解析 csv 文件报错 parse error: extraneous or missing " in quoted-field

解析百度统计 CSV 日志的系统运行了快一个月,没有出现问题。但是今天早上突然报错退出: > import_log /mnt/d/to_del/2020-06-20.csv 2020/06/22 07:55:18 parse error on line 686, column 60: extraneous or missing " in quoted-field 对应的 CSV 文件数据行为类似这样的结构,报错点在“烟台”前的一个双引号上。 "515","2020/06/20 13:07:08","烟台 "gola ...

阅读全文...

golang map 的基本操作

定义并初始化 例如,定义一个城市对应省份的 map cities := map[string]string { "烟台": "山东", "武汉": "湖北" } 如何判断对其的键 key 不存在 if province, ok := cities["烟台"]; ok { // 存在 } else { // 不存在 } 注: 存在时,ok 为 true 不存在时,ok 为 false key 是 string, value 是 struct 的情况 type ...

阅读全文...

golang 写入 csv 文件

想把 golang colly 爬取的网站所有页面的 SEO 信息写入到一个 CSV 文件,方便排查是否有重复设置。 指定分隔符 因为 title, keywords, decription 信息中都可能包含逗号,所以我担心造成混淆。 但是内置的 csv 库只支持以单个字符 rune 来分割。参考:https://golang.org/pkg/encoding/csv/ 不得已,用默认的英文逗号,测试了一下。 writer := csv.NewWriter(file) writer.Comma = ',' // 默认就是逗号,这行代码可省略 golang 非常的贴心,在字段包含英文逗号时, ...

阅读全文...

gin.H 是什么类型

经常在 golang gin 的代码中看到这样返回 json 结构的数据: c.JSON(http.StatusOK, gin.H{ "domain": "sunzhongwei.com", "name": "大象笔记", }) 从 gin 的源码 utils.go 中,可以看到 // H is a shortcut for map[string]interface{} type H map[string]interface{} map 我能理解,等同于 python 的字典 dict。所以 H ...

阅读全文...

golang gin 获取请求中的查询参数,并设置默认值

例如,我想给头条小程序提供一个接口,用来查询图书列表,并设置返回数量限制,在 golang gin 中可以使用 c.DefaultQuery("limit", "20") 设置默认值 c.Query("limit") 不设置默认值 func GetBooks(c *gin.Context) { limit := c.DefaultQuery("limit", "20") ... } 默认值必须为字符串 如果使用 c.DefaultQuery("limit&quot ...

阅读全文...

golang 定时任务

需求 我将一部分事件日志存储到了 MySQL 上,只有最近几天的有参考价值,所以需要每天定时删除早期的日志,以节省存储空间。 技术选型 自从用了 Laravel 的定时任务之后,我就再也不喜欢用 Linux 系统自带的 crontab 了,因为部署时还需要手动配置。 项目多了之后,就容易忘记。不如在 web 服务框架中直接写,不容易遗忘。 golang 的计划任务三方库 https://godoc.org/github.com/robfig/cron 是否需要配置 crontab golang 的这个实现,跟 laravel 的不太一样,不需要再配置一次 crontab。 实际上是开了个 go ...

阅读全文...

近期节日

2020年10月01日 国庆节
2020年10月01日 中秋节
2020年10月04日 世界动物日
2020年10月08日 寒露
2020年10月09日 世界邮政日
2020年10月10日 辛亥革命纪念日
2020年10月13日 中国少年先锋队诞辰日
2020年10月14日 世界标准日
2020年10月15日 国际盲人节
2020年10月16日 世界粮食日
2020年10月17日 国际消除贫困日
2020年10月22日 世界传统医药日
查看更多节日