Golang技术栈归结

kratos系列 ***

kratos项目中使用分布式锁介绍 基于etcd实现的分布式锁 / 另外一个kratos_rockscache项目中有介绍使用SETNX命令实现一个简单的非等待的分布式锁

kratos项目中使用gorm的Transaction的方法介绍 ***** 事务开始时使用tx / 事务的2种使用方法(biz层中与data层中) / 使用依赖注入初始化Transaction / 使用ctx传递tx /  不能在事务中并发去select / 可以在事务中并发去调用更新与创建方法 / 递归获取无限极分类数据(存储与方法、proto的定义、一个项目使用2个biz操作不同业务的数据库) / 关于并发去开启MySQL事务以及MySQL数据库隔离级别问题可以详细查看README.md以及其他markdown文件说明

kratos项目集成kafka介绍  还有将yaml配置文件加载到biz层使用的方法

kratos中使用kafka等消息中间件介绍 注意kratos-transport版本问题 / NSQ的使用 / B站视频链接

kratos项目使用中间件Middleware介绍  注意server/http.go中httpServer除了中间件的各种配置项(还有CORS配置、封装响应体结构) / 在ctx中传递uid / 

kratos项目使用错误码介绍  注意server/http.go中封装的响应结构的写法

kratos中使用rockscache介绍  有pipeline的Exec方法接收redis.Nil错误 / 解析map结构的yaml配置 / 使用python脚本做“防击穿”机制 / redis的SETNX实现非等待的分布式锁 / "防穿透的字符串"的两种处理思路

kratos中使用kafka不同group消费同一个topic的坑

kratos中使用kafka手动ACK消息的方法

kratos中集成钉钉提醒

kratos项目中使用jaeger做链路追踪 trace / 使用resty包发http请求然后将http请求与响应信息加到trace中(span.SetAttributes) / 使用ctxWithoutCancel异步发http请求时跟主协程的ctx停了不影响发http的子协程

Kratos中使用gin处理excel文件上传与下载并批量往数据库与Redis中写入数据  wire的方式注册gin+在server/http.go中初始化gin/专门加一个biz的usecase给gin用/批量创建时限制一次create的数量/子句构造器实现onConfilct的详细说明与demo /上传文件注意限制下一次上传的数量与单个文件的大小 / 使用pipeline每100个数据写入Redis一次 / 使用proto生成的go结构体中omitempty标签的问题

MySQL联合唯一索引相关问题以及在kratos项目中演示  

kratos中使用etcdWatch介绍 ***** 初始化kratos封装的etcdCustom时在clean函数中加上cancel掉ctx的操作,防止goroutine泄漏

kratos使用kafka指定分区发送消息 *****

kratos中集成定时任务介绍 ***** 那个layout项目还有配套博客好好看下新加一个与http与grpc同级的定时任务的server / 还有trace链路追踪 / github上那个kratos-layout研究下

kratos项目中使用kafka实现延迟队列

kratos项目中捕获panic的方法介绍 ***** kratos原生http / 详细使用gin框架的http / Service中写defer + recover函数捕获 / 自定义中间件 / gin框架详细的使用 / Server中间件将traceId封装到请求头中 / encoder不仅定义返回的结构还从请求头中获取traceId

kratos项目使用Nacos作为配置中心的操作介绍 *****

Golang操作kafka遇到分区扩容消费新分区数据的问题 ***** 

 

Kratos项目中使用dtm分布式事务  app_server有使用etcd注册与发现服务 / pkg包使用gconv包转换结构体及结构体切片 / 

 

Nacos系列 ****

Nacos相关技术文档 & Golang操作Nacos实现配置监听的基础代码

2、nacosClient常用的方法:GetConfig、PublishConfig、DeleteConfig、ListenConfig、CancelListenConfig、SearchConfig、PublishAggr
3、在kratos项目中使用nacos当配置中心使用:项目初始化有knacos包(模拟从k8s环境变量中获取nacos链接的配置、如何从远程nacos服务中夹在配置到本地)、如何监听nacos配置变更(参考dataCenter的SeasonSet配置变更+加锁的方法~并测试)、将nacos的client封装到biz层(一个namespace的话就一个client,多个namespace的话用map将client封装即可)、过一下全网冻结配置的逻辑写成demo、facade项目中初始化一个封装了不同namespace的client的map也总结下~ 
4、kratos项目中使用nacos当注册发现中心使用 —— 待定~
 

Golang处理压缩与解压缩文件相关文章 ****

使用Golang解压缩文件遇到的问题及解决方法

使用unpackit包解压gz包遇到的一个问题与解决方案

使用Go处理HTTP压缩文件数据总结 *** 解压的2种思路/自定义错误/http连接池与重试(resty包比它好用!)/判断文件夹存在

 

Goalng处理原生HTTP相关文章总结 ***

Golang中使用HTTP连接池及实际案例 *** netstat命令 retryable包
golang限制发送HTTP请求速率的方法RateLimiter *****  gin框架中演示 / thorttled包 / 注意RateLimiter的写法 
使用go-retryablehttp包实现http“链接池”效果  还有waitGroup控制并发请求的写法最好别加锁了-项目初始化的时候就确定好map中的内容
Golang函数或方法传递nil值的一个坑 ***type不一样的nil的坑/完整的http请求/支持GET与POST请求/POST参数的构建

使用Go处理SDK返回的嵌套层级数据并将所需字段存入数据库(一)

使用Go解析HTTP返回数据为struct并存入数据库的操作 *** HTTP数据转json/json转结构体/结构体数据写入数据库/GORM查询单个及多条数据/时间字符串转时间戳

利用递归的方式获取restful风格有nextUrl接口返回的数据

使用go的http获取三方API的数据 *请求数据并将结果解析为map/string(有bug,后面加上使用连接池以及完善有err返回的写法)

使用Go处理带证书的请求(含发送POST请求的具体实现)

使用Golang解压缩文件遇到的问题及解决方法

使用unpackit包解压gz包遇到的一个问题与解决方案

使用Go处理HTTP压缩文件数据总结 *** 解压的2种思路/自定义错误/判断文件夹存在

kratos项目中使用jaeger做链路追踪&使用resty包发http请求并且将http请求与响应信息加到trace中 trace / 使用resty包发http请求然后将http请求与响应信息加到trace中 / 使用ctxWithoutCancel
 

MySQL与GORM相关 *** 

MySQL循环外开启事务的问题

MySQL并发开启事务与隔离级别相关

Gorm中查询是否返回recordNotFound的情况总结

kratos项目中使用gorm的Transaction的方法介绍 ***** 事务开始时使用tx / 事务的2种使用方法 / 使用依赖注入初始化Transaction / 使用ctx传递tx /  不能在事务中并发去select / 可以在事务中并发去调用更新与创建方法 / 关于并发去开启MySQL事务以及MySQL数据库隔离级别问题可以详细查看README.md以及其他markdown文件说明
 
使用Go解析HTTP返回数据为struct并存入数据库的操作 *** HTTP数据转json/json转结构体/结构体数据写入数据库/GORM查询单个及多条数据/时间字符串转时间戳
 
gorm中使用子句构造器实现on duplicate key update的效果  冲突的字段必须创建唯一索引或联合唯一索引 / 该方法是并发安全的 / 封装的事务分别在biz层与data层中的使用 / 引入gf的gconv包 / 子句构造器中详细的说明

gorm更新数据遇到的空值问题 *** gorm使用map修改空值 / structs包结构体转map / validator包校验结构体 

 

gorm使用Save方法处理时间字段的坑  实际代码中尽量别用save了(跟数据库版本有关系有些版本数据库存0001-0001-0001这样的数据会报错) / 创建时间与更新时间的gorm标签加上default:null,在数据库中设置默认时间是当前时间并且更新时间随着每次更新的时间变化

MySQL联合唯一索引相关问题以及在kratos项目中演示 

Gorm中使用sum查询没有数据返回null的一个问题  IFNULL函数 / 如果数据库中没有相关数据sum函数返回的是null,count函数返回0

 

Redis相关 ***

redis协议介绍 *****

[私有]CE计算引擎以及rediStack相关

Kratos中使用gin处理excel文件上传与下载并批量往数据库与Redis中写入数据 ***  wire的方式注册gin+在server/http.go中初始化gin/专门加一个biz的usecase给gin用/批量创建时限制一次create的数量/子句构造器实现onConfilct的详细说明与demo /上传文件注意限制下一次上传的数量与单个文件的大小 / 使用pipeline每100个数据写入Redis一次
 
使用pipeline执行命令遇到redis.Nil的坑  pipeline.Exec(ctx) 方法批量查询记得捕获redis.Nil这个错误

Redis内存使用率增长的一些解决思路 ******  scan命令 / 使用redis-cli配合其他命令将数据导出到本地

go操作Redis封装的方法 ***暂时只有list相关的方法/返回interface保证结构体必须实现某些方法

Golang操作redis与kafka封装的方法

go操作redis的一些练习 
项目中往redis中存数据库中指定字段的方法 ***** structs包结构体转map忽略字段 / 加redis标签用反射实现 / pipeline批量SET / GORM用SELECT查指定字段并将结果构建到map中但是注意map的key跟gorm标签定义的一样
 
 

2024杂谈 ****

go1.22的一些关键改动及代码演示

golang中好用的并发包conc介绍 *****

go-zero中好用的流处理利器fx与mr介绍 ***** (+使用并发包需要注意的问题)

使用fx.Parallel方法并发执行函数时遇到的惰性计算的坑

使用errgroup并发查询数据库 使用channel控制并发量 / 参考文章中有一个异步时ctx cancel 的坑注意一下! 
Golang操作kafka遇到分区扩容消费新分区数据的问题 ***** 

使用Golang操作kafka消费指定分区数据 *****

Golang操作kafka遇到网络问题重试的案例 *****

Go新手容易踩的坑(控制结构相关)

Go新手容易踩的坑(函数与方法) 

 
 

2023杂谈 ***

golang中使用原子操作监听配置更新  atomic.Value的用法 / sync.Cond等待通知 / 加载json文件 / 获取文件hash值

压测合集 wrk/sysbench/ghz

压测: wrk压测的lua脚本使用随机列表与字符串参数 *****

使用pipeline执行命令遇到redis.Nil的坑 pipeline.Exec(ctx) 方法批量查询记得捕获redis.Nil这个错误

go-zero中好用的流处理利器fxmr介绍 ***** (+使用并发包需要注意的问题)

使用fx.Parallel方法并发执行函数时遇到的惰性计算的坑

gorm中使用子句构造器实现on duplicate key update的效果 该方法是并发安全的 / 封装的事务分别在biz层与data层中的使用 / 引入gf的gconv包 

golang中切片越界获取到零值的坑

Golang中处理JSON字符串相关总结  gjson、jsonIter(有benchmark基准测试的写法~)等

Golang中好用的三方工具包lancet介绍  有结构体切片的转换

MySQL联合唯一索引相关问题以及在kratos项目中演示 

使用golang灵活处理动态文案 正则表达式 / 字符串替换

 

 

2022杂谈 ***

 「转」50个Go新手容易犯的错误 

xorm+postgreSQL实现事物与in查询 *** xorm事物/xorm拼接in操作/insert遇到主键冲突 on conflict do nothing或update

Golang在函数中修改外部变量

golang项目中使用异步任务

golang生成随机字符串  ***2种方法/还有性能测试的代码

Golang中slice操作的一些问题 *** slice引用类型的特殊问题

Golang获取随机float64(正数)数据与随机int数据(可以是负数) *** decimal包的使用

Golang处理小数四舍五入与不进行四舍五入的用法 *** decimal包的使用

go.mod文件replace语法 

expr包的使用

golang校验结构体字段的库validator的使用

使用channel控制并发数以及超时的写法 ***还有超时的写法

控制Goroutine并发量的解决方案 *** 

sync.Once的基本使用以及拓展 单例模式/带返回错误/查询是否初始化过

使用errgroup并发查询数据库 使用channel控制并发量 / 参考文章中有一个异步时ctx cancel 的坑注意一下!

golang实现等待通知机制的方法 sync.Cond / sync.Waitgroup / channel实现

golang中goroutine泄漏的问题以及解决方案 goroutine泄漏/退出协裎

2021杂谈 ***

xorm相关操作小结  *

go-pg库操作PostgreSQL小结 *

使用pgcli工具连接postgreSQL数据库服务

Go struct类型的map结构体成员不能修改的问题  ***

使用mysqldump同步两台服务器中不同数据库相同表结构的表 shell脚本手动同步MySQL 

Golang中使用recover捕获panic的操作及遇到的一个坑

项目中使用进程内缓存的一些经验及注意事项  *** 进程缓存使用及注意事项

postgreSQL数据备份与迁移的完美实践 *** pgdump/pgrestore

MySQL与postgreSQL在left join查询时的区别 

解决MySQL5.7的表无法插入中文的问题

使用waitgroup在循环中开Goroutine处理并发任务 ** 

MySQL与PostgreSQL中解决插入主键冲突的问题 *** on conflict do / ON DUPLICATE KEY

Golang在函数中给结构体对象赋值的一个坑 ***

Go出现panic的场景

Golang结构体与JSON相互转换时的小技巧 结构体标签中将float64数据类型解析为string

Golang中append与copy内置函数介绍 ***

Golang结构体序列化与反序列化时初始值的问题 *** omitempty标签/

关系型数据库跨时区查询简介 *** postgreSQL跨时区查询

Redis内存使用率增长的一些解决思路 ******  scan命令 / 使用redis-cli配合其他命令将数据导出到本地

Python VS Golang

浅谈Python与Golang中的“惰性求值” *** 闭包与goroutine的惰性求值/waitGroup的写法/惰性查询/惰性计算

Python与Golang中给列表中字典按照某个key排序的实现以及Go中给切片中的结构体排序 ***给列表中的 字典/结构体 按照key排序 / 优先级特殊排序

在Golang中实现与Python装饰器类似功能的方法 ***Go中实现类似Python装饰器的效果

Python与Golang中“类的归一化设计”实现与对比 ***

Python与Go列表切片越界的对比 **** golang切片越界获取不超过容量不会报错但是多余的会获取到“零值”

Golang中实现Python里面in操作的方法  ***第三方实现的一个hashset包

Python与Golang中实现单例模式 

封装方法

go语言结构体转map的方法  *** 推荐lancet包中的方法可以用json标签 & structs包

Golang中map转结构体的不同方法 *** 注意带下划线字段的处理 mapstructure包

golang基础数据类型转换小结 (int/float/string/byte相互转换)*****

golang时间与时区相关操作总结时间时区操作*****

各种结构相互转换 (相对较乱,后面再拆分总结)

使用golang实现的一个LRU缓存模块  *没有redis的话可以使用这个低级的缓存/加锁保证并发安全

常用操作

go常用操作 ***一些操作小技巧

Golang序列化与反序列化操作总结及一些实践经验 *** JSON序列化与反序列化

零碎杂谈

使用go module导入本地包 *

Go控制协裎并发数量的用法及实际中的一个案例 **

实践指南

使用Go处理SDK返回的嵌套层级数据并将所需字段存入数据库(一)

使用Go解析HTTP返回数据为struct并存入数据库的操作 *** HTTP数据转json/json转结构体/结构体数据写入数据库/GORM查询单个及多条数据/时间字符串转时间戳

利用递归的方式获取restful风格有nextUrl接口返回的数据

使用go的http获取三方API的数据 *请求数据并将结果解析为map/string(有bug,后面加上使用连接池以及完善有err返回的写法)

使用Go处理带证书的请求(含发送POST请求的具体实现)

doris中的临时分区以及golang删除doris临时分区的操作

使用Go解压文件总结

使用Golang解压缩文件遇到的问题及解决方法

使用unpackit包解压gz包遇到的一个问题与解决方案 

使用Go处理HTTP压缩文件数据总结 *** 解压的2种思路/自定义错误/http连接池/判断文件夹存在

学习记录

《Go语言开发实战》笔记 

gin框架学习

官方文档中的许多实例

https://gin-gonic.com/zh-cn/docs/examples/   ***

个人笔记

gin框架入门练习笔记 * 获取参数/重定向/路由/中间件/运行服务等

gin项目的路由拆分与注册 *(实际项目大概结构)

gin框架实现简单的jwt认证

docker与kubernetes ***

自己总结

docker学习与应用

Docker与Es常用的操作命令

学习参考 

Docker技术入门与实战

如何使用Docker部署Go Web应用

posted on 2020-10-21 19:53  江湖乄夜雨  阅读(784)  评论(0编辑  收藏  举报