golang

分类下相关文章

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

阅读全文...

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。既不用缩进,也清晰直观 ...

阅读全文...