快乐的程序员
go cron实战 go cron实战
写在前面有时候在项目中需要用到定时任务,在网上搜了一下,找到robfig的cron开源包,有11k star。今天写篇文章,介绍一下它。 代码废话不多说,直接上菜 package main import ( "fmt" "log"
2024-03-12
go 复制context go 复制context
写在前面在项目中有时候需要异步运行某个函数,但是又不能因为主程序退出了而提前终止。比如一个异步接口触发的某个耗时任务,接口之间一般都会设有超时时间。所以不能因为接口已经结束了而导致异步任务终止,但是又不能传空context到异步任务中,因为
2024-03-12
GO 如何利用高阶函数写出优雅的代码 GO 如何利用高阶函数写出优雅的代码
前言go项目中经常需要查询db,按照以前java开发经验,会根据查询条件写很多方法,如: GetUserByUserID GetUsersByName GetUsersByAge 每一种查询条件写一个方法,这种方式对外是挺好的,对外遵循
2024-03-12
Go 可排序的map Go 可排序的map
前言众所周知,go map是无序的,每次遍历map得到的顺序是不一样的。如果非要实现有序,则只能先获取所有的key,再排序,然后遍历key,通过key获取value。 今天把上述操作封装了一下,写了一个可排序map。 接口// 创建一个So
2024-03-12
Go 函数返回nil避坑 Go 函数返回nil避坑
前言go语言写函数时经常返回nil,然后在函数外面判断返回值是否为空。这里有个bug,记录一下 问题1 (*Type)(nil) ≠ nil func returnsError() error { var p *MyError = nil
2024-03-12
Go 结构体转换成 map Go 结构体转换成 map
写在前面最近项目中多次遇到需要将结构体转换成map的操作,于是在网上搜了一下相关实现 方法一:序列化和反序列化这种方法比较简单,也就是先将结构体序列化成字节,再把字节序列化成map func StructToMapV1(src interf
2024-03-12
Go 中节省内存小技巧 Go 中节省内存小技巧
GO虽然不消耗大量内存,但是仍有一些小技巧可以节省内存,良好的编码习惯是每一个程序员都应该具备的素质。 预先分配切片数组是具有连续内存的相同类型的集合。数组类型定义时要指定长度和元素类型。 因为数组的长度是它们类型的一部分,数组的主要问题是
2024-03-12
GO 反射对性能的影响原来这么大 GO 反射对性能的影响原来这么大
写在前面今天在公司写了一段代码,判断一个变量是否为空值,由于判断的类型太少,code review的时候同事说还有很多类型没有考虑到,并且提到有没有开源的包做这个事,于是找了一段assert.IsEmpty里面的代码。但是这段代码用到了反射
2024-03-12
GO数据类型 GO数据类型
数据类型简单类型 空值:nil 整型:int,int8,int16,int32,int64,uint,uint8,uint16,uint32,uint64 浮点型:float32,float64 字节类型:byte(等于uint8) 字符串
2024-03-12
Go websocket Go websocket
目的使用go语言实现websocket服务端 逻辑本示例主要使用gorilla/websocket框架将http请求升级成websocket协议 项目结构. ├── go.mod ├── go.sum ├── index.html ├──
2024-03-12
Go画图的包 Go画图的包
今天看到了一个golang画图的包gg,感觉挺有意思的。 安装go get -u github.com/fogleman/gg 使用示例1:画一个圆dc := gg.NewContext(1000, 1000) dc.DrawCircle
2024-03-12
GO一题 GO一题
题目下面这段代码能否通过编译,不能的话原因是什么;如果通过,输出什么。 func main() { list := new([]int) list = append(list, 1) fmt.Println(list) } 分析lis
2024-03-12
5 / 6