随笔分类 -  go

摘要:demo代码地址 https://github.com/Me1onRind/go-demo 拦截器原理 和gin或django的middleware一样, 在请求真正到达请求方法之前, 框架会依次调用注册的middleware函数, 可以基于此方便的对每个请求进行身份验证、日志记录、限流等功能 拦截 阅读全文
posted @ 2021-08-29 00:38 Me1onRind 阅读(1619) 评论(0) 推荐(0)
摘要:场景 需要使用go-playground/validator对入参进行更细致的验证, (一来相比其他grpc validator plugin, 这个包功能完善一些, 二来项目中使用的gin框架也是依赖于才此包, 保持统一) 当然其他场景可能有一些其他需求, 需要对protobuf文件编译出来的结构 阅读全文
posted @ 2021-01-10 22:38 Me1onRind 阅读(2966) 评论(0) 推荐(2)
摘要:go test基础用法拾遗 单元测试文件 TestMain func TestMain(m *testing.M) { os.Exit(m.Run()) } 一个目录下所有单元测试文件中只能有一个TestMain函数 执行go test时, 先执行TestMain, 执行至m.Run()时再执行具体 阅读全文
posted @ 2020-12-20 16:46 Me1onRind 阅读(832) 评论(0) 推荐(0)
摘要:本文仅记录wire的具体使用方法, 而wire这个工具的作用, 功能和优缺点不再赘述 wire的github地址: https://github.com/google/wire demo中struct依赖关系 场景一 成员变量是结构体类型 用法一: 直接通过各struct的new函数拼装 自定义了所 阅读全文
posted @ 2020-09-08 22:54 Me1onRind 阅读(2668) 评论(0) 推荐(0)
摘要:限流器模型 golang.org/x/time/rate 限流器目前提供了一种令牌桶算法的的限流器。 请求需要拿到令牌才能接着往下执行, 逻辑上有一个令牌桶,桶的最大容量是固定的。 当桶内令牌数 小于 桶的最大容量时, 以固定的频率向桶内增加令牌直至令牌数满。 每个请求理论上消耗一个令牌(实际上提供 阅读全文
posted @ 2020-06-25 12:43 Me1onRind 阅读(3443) 评论(0) 推荐(0)
摘要:1. go直接调用写在本文件的c函数 需要import "C", 目的是让go的编译器识别并提取出C代码, 做处理后才能真正让go代码直接调用c的函数 import "C" 和 上面的C代码之间不能有空行 这是语法规则 c 的 plus 函数返回的类型在go里并不是 int 而是 _Ctype_in 阅读全文
posted @ 2020-05-06 09:45 Me1onRind 阅读(1358) 评论(0) 推荐(0)
摘要:场景 最近写代码时碰到一个场景, 需要使用 map[int]struct{} 结构来存储task, map的key是task的id,随时可以增减。因为的确除了看书,基本上没使用过条件变量所以后面过了一天才想到可以用条件变量来实现。记得在某篇博客上看到的一句话挺不错,大概是同步语句中,条件变量的特点在 阅读全文
posted @ 2019-10-11 13:06 Me1onRind 阅读(927) 评论(0) 推荐(0)
摘要:实现功能 info debug 级别的日志输出到 /path/log/demo.log warn error .... 级别的日志输出到 /path/log/demo_error.log 日志自动按小时分割 最多保留7天的日志 依赖的第三方包github地址 https://github.com/u 阅读全文
posted @ 2019-05-24 16:29 Me1onRind 阅读(8512) 评论(0) 推荐(0)
摘要:本文为linux环境下的总结,其他操作系统本质差别不大。本地文件I/O和网络I/O逻辑类似。 epoll+多线程的模型 epoll+多线程模型和epoll 单进程区别、优点     对比于redis这样典型的epoll+单进程为主的模型,个人理解epoll+多 阅读全文
posted @ 2019-04-08 17:12 Me1onRind 阅读(6032) 评论(0) 推荐(0)