golang

分类下相关文章

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

阅读全文...

GoAdmin Theme does not implement

升级了 GoAdmin 版本,但是 go build 编译时报错: > go build # github.com/GoAdminGroup/themes/adminlte ../../../golang/pkg/mod/github.com/!go!admin!group/themes@v0.0.30/adminlte/adminlte.go:43:32: cannot use &Adminlte (type *Theme) as type "github.com/GoAdminGroup/go-admin/template".Template in arg ...

阅读全文...

升级 go install 已安装的三方工具版本

今天在使用 GoAdmin 的 adm generate 命令时,发现新版本提示: GoAdmin CLI v1.2.9, the latest version is v1.2.13 now. 这个 adm 命令行工具是通过 go install 安装的。 我尝试再次执行: > go install github.com/GoAdminGroup/go-admin/adm 但是安装之后,发现依旧是老版本。 于是,又尝试在 github 地址后面添加 latest,报错: > go install github.com/GoAdminGroup/go-admin/adm@lat ...

阅读全文...

golang defer 的意义

defer 的使用场景 需要打开,并手动关闭的场合。例如: open, close 文件 connect, disconnect 网络连接 lock, unlock 数据库事务 defer 触发的时机 在当前函数 return 的时候被触发。 defer 的意义 防止写完冗长的处理逻辑之后,忘记关闭操作。 相对 python 的 with block。既不用缩进,也清晰直观 ...

阅读全文...

golang 本地调试第三方库的代码

正在用的 golang 三方库 GoAdmin,发现有个时间区间组件的 bug。 时间组件无法切换 中文 locale 过滤功能无效。目前猜测是 locale 问题导致的日期格式问题 想自己调试一下看看能否解决。 但是如何调试呢? 首先,我是想直接修改 GOPATH/src 下的代码,然后重新编译。但是发现 > ls $GOPATH/src/github.com/GoAdminGroup/ 是空的。。。 解决方法 使用 go mod 替换源的方式: go mod edit -replace github.com/GoAdminGroup/go-admin=/home/zhongwe ...

阅读全文...

golang colly 爬取网站所有页面的标题

由于接手了一个年久失修的网站,其网页的标题,keyword,description 异常混乱,很多页面的标题都是相同的,或者非常长,填充了大量冗余的关键词。 网站的板块,独立页非常多,完全靠检查代码,或者检查页面,很难找全所有有问题的页面。 为了快速找出有问题的页面,我决定用 golang colly 写个爬虫,自动检测全站的标题等 SEO 设置。 hello world, colly 以豆瓣网站为例: package main import ( "fmt" "github.com/gocolly/colly" "github.com/ ...

阅读全文...

go install 的妙用

我之前一直对 go install 干了些什么不太了解。甚至分不清 go get 与 go install 的区别。 最近 golang 代码写的多了,接触的三方库多了,发现 go install 确实非常方便。 例如,GoAdmin 可以通过 go install github.com/GoAdminGroup/go-admin/adm 来安装一个 adm 工具,之后就可以通过 adm 命令来自动生成一些数据表相关的代码。类似 php artisan。 除了安装一些三方工具,我发现还可以来安装一些自己用 golang 写的小工具。 全局安装自己写的工具 例如,我写了一个导入日志的小工具 i ...

阅读全文...

golang 读取命令行参数

例如,我想用 golang 读取命令行传入的文件名,可以直接使用 os.Args。 package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) if len(os.Args) != 2 { fmt.Println("请输入文件名") return } fmt.Println(os.Args[1]) } 运行测试 > ./test baidu-realtime.csv [./test baidu-realtime.csv] ...

阅读全文...

如何组织 Golang 项目目录,使一个项目包含多个 main 入口程序

真实需求场景 例如,我在写一个分析百度统计实时访客历史记录的系统,其包含的基本模块: 一个 GoAdmin 写的 Web 管理后台服务 一个 CSV 数据文件导入 MySQL 的命令 测试项目根目录下是否可以共存两个 main 入口程序 先不管网上的那些 golang 代码组织策略,单纯的测试一下是否可以在项目根目录下共存两个 main 入口程序。 测试方法: 既有的 import_log.go 中已经有一个 main 函数了 新建一个 main.go 文件,与 import_log.go 同属 package main,包含一个简单的 main 函数,输出 Hello world 运 ...

阅读全文...

golang sql 插入时报错 Error 1292: Incorrect datetime value: '' for column at row 1

在解析百度统计实时访客 csv 文件时,会遇到上次访问时间为空的情况。 pre_access_at := "" if strings.HasPrefix(record[13], "2") { pre_access_at = record[13] } 这样在执行 SQL insert 操作时,会报错: Error 1292: Incorrect datetime value: '' for column 'pre_access_at' at row 1 而 golang 中 string 类型并不能被赋值为 nil。 即便使用 time.Ti ...

阅读全文...