golang

分类下相关文章

golang 读取并解析 csv 文件

从百度统计后台导出并下载了实时访客的 CSV 文件。想本地解析一下,并导入到 MySQL 中做备份,因为百度统计只能保留两个周的历史数据,且上限为5000条。 golang 解析 csv 代码 这里用到了 golang 内置的 "encoding/csv" 库,能自动读取一行 csv 数据,并返回 slice 类型的数据。 package main import ( "encoding/csv" "fmt" iconv "github.com/djimenez/iconv-go" "io&quo ...

阅读全文...

GoAdmin 兼容低版本的 MySQL,Unknown character set: 'utf8mb4'

有一个历史悠久的服务,使用的是 MySQL 5.0 版本。我想用 GoAdmin 重写管理后台,但是 MySQL 又不敢停机升级。发布之后,运行报错: panic: Error 1115: Unknown character set: 'utf8mb4' goroutine 1 [running]: github.com/GoAdminGroup/go-admin/modules/db.(*Mysql).InitDB.func1() /home/zhongwei/golang/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.9 ...

阅读全文...

数据表非 id 主键时,GoAdmin 报错 Error 1054: Unknown column 'category.id' in 'field list'

使用 GoAdmin 管理新建的分类表 category 的 CRUD 时,报错: Error 1054: Unknown column 'category.id' in 'field list' 而 category 的主键,没有使用默认的 id,而是自定义了一个名 c_id. 解决方法 替换生成的代码中的 categoryTable := table.NewDefaultTable(table.DefaultConfigWithDriver("mysql")) 为 categoryTable := table.NewDefaultTable(table.Confi ...

阅读全文...

GoAdmin 列表页指定字段的搜索过滤

GoAdmin 常用的几种搜索过滤方式: 精确查找 适合 ID,订单号等。代码示例: info.AddField("Id", "id", db.Int).FieldFilterable() 部分匹配 适合关键词查找。代码示例: info.AddField("Name", "name", db.Varchar). FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}) ...

阅读全文...

golang 换行报错:expected statement, found '.'

在写 golang 代码时,遇到一行代码过长,于是,我习惯性地参照 PHP 的折行写法: info.AddField("Name", "name", db.Varchar) .FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}) 但是 VIM 保存时,触发的 go fmt 报错: expected statement, found '.' 参考了一下 github 上开源项目的代码,原来逗点需要写在上一行。。。 info.AddField(" ...

阅读全文...

减小 golang build 编译后程序包的文件大小

在 Golang Gin 写的后台程序加上 GoAdmin 之后,go build 生成的发布包体积已经达到了 30M 之巨。上传阿里云服务器,以 400K/s 的传输速度得上传1分钟。 30075408 网上找到一个解决方案,加上编译参数: go build -ldflags "-s -w" 体积减小到了 23M。 22778576 文件大小降幅大约四分之一。 编译参数 -s 的作用是去掉符号信息。去掉符号表,golang panic 时 stack trace 就看不到文件名及出错行号信息了。 -w 的作用是去掉 DWARF tables 调试信息。结果就是 ...

阅读全文...

golang gin & nginx 获取访客的真实 IP

在 golang gin controller 中使用 c.ClientIP() 获取请求的 IP,但是获取到的是 127.0.0.1. 估计是 Nginx 在转发请求给 golang 时,没有配置好。 解决方法 增加两行配置即可。 location /go/ { proxy_set_header X-Forward-For $remote_addr; proxy_set_header X-real-ip $remote_addr; proxy_pass http://127.0.0.1:8080/go/; } reload nginx,测试 ...

阅读全文...

生产环境 GoAdmin 后台加载慢的问题

从 Chrome Network 里看,GoAdmin 加载了很多大的静态资源文件,例如 all_2.min.js 有 1.2M 之大。 更严重的是,GoAdmin 没有对静态资源文件做缓存设置,导致每次用浏览器打开,都需要重新拉取一遍全量的静态资源文件。而我的服务器带宽只有 1M,下载速度非常缓慢。 可以对比参考 Google 首页的处理方式: 解决方法一: GoAdmin 后台设置 CDN,参考 http://doc.go-admin.cn/zh/admin/cdn/ 但是这种方法,我并不打算使用。原因是: 更新 CDN 文件麻烦。每次版本升级,都需要对应的更新 CDN 文件。 由 ...

阅读全文...

golang gin 实现 redirect 302 跳转

我的需求是,访问了一个 golang gin 的链接,然后自动 302 跳转到一个三方链接。主要是为了做出站链接统计。 实现方法 c.Redirect(302, "https://www.sunzhongwei.com") c.Abort() Abort 终止的意思。 ...

阅读全文...

GoAdmin 新增路由后报错:panic: handlers are already registered for path

参照 GoAdmin 文档中的提示,添加了一个新的 model 及路由,但是编译成功后,运行报错: [GIN-debug] GET /go/admin/assets/dist/fonts/fontawesome-webfont.eot --> github.com/GoAdminGroup/go-admin/adapter/gin.(*Gin).AddHandler.func1 (3 handlers) panic: handlers are already registered for path '/go/admin/assets/dist/fonts/fontawesome-w ...

阅读全文...

go-admin cli error: interface conversion: interface {} is nil, not string

在使用 GoAdmin 生成数据模型文件时报错: $ adm generate GoAdmin CLI v1.2.8 ? choose a driver mysql ? sql address 127.0.0.1 ? sql port 3306 ? sql username goadmin ? sql password ******** ? sql database name goadmin go-admin cli error: interface conversion: interface {} is nil, not string 解决方法 看了一下 GoAdmin adm 目录 ...

阅读全文...

golang 管理后台框架 gin-vue-admin 与 GOADMIN 对比

想尝试一下用 golang 写管理后台,如果开发效率可以接受的话,就逐步替换掉目前的 laravel backpack 后台。 下面的内容已经过时,不需要再看了。目前,我已经改用了 Golang gin 作为后台接口服务,前端使用 Ant Design Pro 作为前端(Ant Design 的颜值有保证,做企业应用后台管理,不用担心太丑陋的问题),做了前后端分离,灵活度非常高。具体参考 搭建 Golang Gin + Ant Design Pro V5 管理系统后台。 Ant Design Pro 的在线预览地址: https://preview.pro.ant.design/dashboa ...

阅读全文...

cannot find module providing package github.com/xxx: working directory is not part of a module

运行 goadmin 时,报错 $ go run main.go main.go:4:2: cannot find module providing package github.com/GoAdminGroup/go-admin/adapter/gin: working directory is not part of a module ... 解决方法 $ go mod init sunzhongwei.com/goadmin go: creating new go.mod: module sunzhongwei.com/goadmin 此时,目录下会新建 go.mod 文件,定义了各 ...

阅读全文...

go get 显示 golang 三方包下载进度

今天在下载一个 golang 三方包时,执行了很长时间,也没有执行完毕。 命令如下: go get github.com/GoAdminGroup/go-admin/adm 我不知道是网络断掉了,还是什么原因,因为默认 go get 是不显示进度的。 Reddit 上找了一个解决方法,非常有效,可以在不修改 golang 命令代码的情况下,直接查看下载进度: strace -f -e trace=network go get github.com/GoAdminGroup/go-admin/adm 2>&1 | pv -i 0.05 > /dev/null 进度显示: ...

阅读全文...

golang 自动化测试

为了提升开发效率,很多时候我只想在终端下敲代码,并执行自动化测试验证。相比,每改一点代码,就打开浏览器手动测试,要节省很多时间,也不容易临时起意去论坛闲逛了。。。 依赖包 import "testing" 测试代码规范 文件名格式:file_test.go 功能测试函数名格式:TestFuction 性能测试函数名格式:BenchmarkFunction,执行命令 go test -bench 时会运行 assert 库 https://github.com/stretchr/testify 内置的 Errorf 写法太啰嗦了,找了一个支持 assert 语法的库。我 ...

阅读全文...