随笔分类 - lang / GO
like
go设计逻辑: 显示优于隐式
摘要:显示优于隐式map类型: make(map[int]int),再没有声明长度的情况下,是可以执行的。slice类型: make([]int),在没有生命长度的情况下,则是不可以执行的。因为分配的数据结构底层逻辑不同,map是作为hash结构,支持动态扩展,有懒加载的逻辑支撑。而slice,功能上属于
阅读全文
go批量获取数据事项
摘要:批量获取需要过滤空值: 结果集或者入参的单个/多个均需要过滤
阅读全文
goWeb框架中ctx的canceled动作及避免形容
摘要:在web框架中,每个请求都会产生一个新的ctx,在ctx的生命周期内:如果第三方服务接到了 context canceled的错误。 那么这个错误将ctx剩余的生命周期,产生一定污染,导致无关重要的一个动作,导致整个生命周期整体失败。 所以可以在对应的动作中(不影响主流程的动作),生命一个新的ctx
阅读全文
vegeta
摘要:go压测工具 地址: https://github.com/tsenart/vegeta 1. 使用 1 echo "GET http://example.com" | vegeta attack -duration=10s -rate=50 > results.bin 2 cat results.
阅读全文
kratos相关错误汇总
摘要:1.版本问题: tr.reqHeader kratos版本不一致 tr.reqHeader 报错 · Issue #45 · tx7do/kratos-transport (github.com)
阅读全文
正则对cpu的消耗
摘要:背景: 正则对于cpu的消耗,其中的资源占比较高。如果数据量庞大且正则复杂的时候,那么idle会消耗殆尽。 以下为正文 正则表达式 (regex) 是一种强大且灵活的模式匹配工具,广泛用于文本处理。然而,正则表达式的处理可以对 CPU 造成显著的消耗,尤其在处理复杂的模式或大型输入时。以下是正则表达
阅读全文
gorm忽略报错: record not found
摘要:在配置gorm的时候,往往会同步设置日志句柄的赋值,但是如果不忽略一些报错的话,它会将所有报错悉数打出,造成一点的日志分析干扰。 简单配置的话,内容如下: 1 zapLog := gormlog.NewGormLog(log.NewHelper(logger), "mysql") 2 //忽略找不到
阅读全文
go正则相关使用
摘要:目前go官方提供regexp库,来实现相关正则操作,但是在兼容perl上面,相对较弱。 一些正则语法无法支持,比如: 正向前瞻/负向前瞻。 基于此,出于对正则能力上的需要,需要重新选择正则库。 1 github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre
阅读全文
执行a包时,怎么调度b包init函数
摘要:在 Go 中,当一个包被导入时,该包中的 init 函数会在程序执行开始时自动被调用。但是,直接导入 a 包时无法保证 b 包的 init 函数被调用。如果你希望在导入 a 包时同时调用 b 包的 init 函数,你可以在 a 包中手动导入 b 包,这样在 a 包被导入时,b 包的 init 函数也
阅读全文
键值对象的设计
摘要:键值对对象与工厂、与组合复用等关系 键值对对象(Key-Value Pair Objects,简称KV Pairs)是一种数据结构,在许多编程语言中广泛应用,如JavaScript中的对象、Python中的字典等。键值对对象可以看作是映射关系的集合,每个键关联一个唯一的值。 与工厂模式的关系: 在设
阅读全文
go耗时函数
摘要:本质上依旧为记录时间,进行相减操作的思路。 func CostStaticDemo() { // 开始计时 start := time.Now() // 执行函数 sum := sum(1000000) // 结束计时 end := time.Now() // 计算耗时 duration := en
阅读全文
goENV环境变量
摘要:GO111MODULE="" // 是否使用mod包管理 当前推荐设置值为 on GOARCH="arm64" // 当前芯片架构 某些老包限制支持cpu的架构种类 可以通过修改芯片类型来曲线救国 GOBIN="/Users/test/go/bin" // go 一些安装软件的bin路径 比如: d
阅读全文
go:fnv与idGenerator
摘要:fnv 属于hash生成算法的一个方向。 具体参考git地址: FNV-1a/fnv1a.go at master · romain-jacotin/FNV-1a (github.com) 这是一个包含多种长度生成hash值的算法。 idGenerator 类似一个基础插件,or 中间件的服务。 字
阅读全文
关于fieldMask在go项目使用
摘要:介绍: Netflix API 设计实践: 使用FieldMask (qq.com) 该文章,详述了关于proto中,使用fieldMask的背景及收益,还有具体example提供参考。 接下来,需要考虑在go项目中的使用。 主要为以下几方面: 1. 服务端需要提供新的proto文件 2. 客户端需
阅读全文
grpc服务报错: http2 frame too large
摘要:报错如下: 1 4xx BadRequesterror reading server preface: http2: frame too large 其中4xx为客户端报错中的一个具体数字。比如: 404/415,仅以报错举例,且出现报错码不固定。 但是error msg的核心内容不变: frame
阅读全文
kratos
摘要:1. 安装 1.1 环境准备 go proto protoc-gen-go 环境变量: 通过 go env查看相关变量设置是否正常,比如mod是否开启,goproxy是否设置为国内代理。 go env -w GOPROXY="" #涉及扩展软件 - mac版 # brew包管理器安装 brew in
阅读全文
golang-groutine有序调度
摘要:本质上还是通过channel的队列性质(FIFO)来实现的,以这个思路为主。 1 func test1() { 2 var wg sync.WaitGroup 3 4 var ch1 = make(chan int, 1) 5 var ch2 = make(chan int, 1) 6 var ch
阅读全文
go-struct指针与值传递
摘要:示例如下 1 type compare0 struct { 2 version1 string 3 version2 string 4 } 5 func (c compare0) setV1(str string) string { 6 c.version1 = str 7 return c.ver
阅读全文