2021年8月20日 ginbind 的实现过程-一起来看gin源码吧 是的,没错。 如果你用过 gin 那么你一定知道,gin 中绑定参数的方式很零散。 c *gon.Context 给你提供了很多中方法, 例如BindHeader, BindURI 等等, 但是如果想要绑定 reqeust 中不同地方的参数, 那对不起咯,并没有。 另外, gin 中的 Bind 接口, 默认是包含了 参数验证 validate 功能的, 因此如果你……
阅读全文
2021年8月19日 ginbinder 一次绑定 Request 中所有需要的数据 Usage 废弃/不可用: 弃用原生 tag form tag。 保持: 使用 tag uri 绑定路径中的参数。 作用于某个字段 就是 example.com/:some/:path 中 冒号后面的 保持: 使用 tag header 绑定 header。 作用于某个字段 新增: 新增 tag query tag 绑定通过 Query 传递的参数。 作用于某个字段 就是 example.com/some/path?a=1&b=2 中 问号后面的那一串 新增: 新增 tag cookie 绑定 cookie 中 简单 的键……
阅读全文
2021年8月18日 go1.17 泛型尝鲜 语法格式如下, 需要使用 [T Ttype] 指定约束条件, 例如 [T any] 不做任何约束, [T MyInterface] 满足 MyInterface 的约束 接下来我们将尝试上述提到的内容。 1 2 3 func fname[T Ttype](args []T) T { // statement } 需要注意的是, 现在泛型在 go1.17 中依旧不是正式支持, 所以在 IDE 或者编辑器上会有报错。 编译需要指定额外的 -gcflags=-G=3 参数 1 go run -gcflags=-G=3 main.go 开始吧 不约束 any 首先,我们来……
阅读全文
2021年7月28日 golang gin 使用 context 实现 ioc gin 是一个流行的 golang webserver 的框架。 https://github.com/gin-gonic/gin gin 中 HandlerFunc (type HandlerFunc func(*Context)) 的使用随处可见, ex. Middleware , Handler 中。 1 2 3 4 router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) }) 因此,根据之前 golang context 实现 IoC 容器经验, 使用 *gin.Context 作为 IoC 容器再好不过了。 标准库 context.Context 是一个接口(interface), gin.Context 是 gin 工程自己封装的的一个 struct, 并实现了该接口。 虽然……
阅读全文
2021年7月27日 golang 使用 Context 实现 IoC 容器 参考文章 控制反转(IoC)与依赖注入(DI) 指出了依赖注入可以降低程序的耦合性。 能更好的拆分功能与基础设施。 那么在 golang 中又怎么实现呢? 代码地址 golang-context-ioc.go 实现了一个 MysqlDriver 实现我们所有的数据存取操作。 并在全局域中实例化了一个对象 my。 在 main.go 中创建了一个 ctx := context.Background() 使用使用 ctx 作为 IoC 容器, 使……
阅读全文
2021年6月30日 分支删除触发 gitlab CI 使用 environment , 在 gitlab branch 被删除的时候,触发 CI Stopping an environment 尝试在 JOB A 中申明一个变量,并停止。 使用 on_stop action 动作, 在删除分支时(同时删除变量), 触发运行 JOB B Stop an environment when a branch is deleted Stop an environment when a branch is deleted GitLab 在 CI 中配置一个 环境变量 , 当 branch 被删除的时候清理该 环境变量, 触发 on_stop 动作, 需求。 随后这段代码是节选,在 delpoy_action job……
阅读全文
2021年6月27日 netfilter 五链四表 - 为什么服务器没有监听 80 端口却被k3s占用了 其实标题已经给出答案了。 希望大家都能夯实基础, 万事逃不过一个 道理和规则 。 现象 一天,发现服务器上 80 端口不能正常访问了, 无论怎么都是 404 page not found 。 这就奇怪了。 ssh 登录终端, 查看端口监听情况, nginx 服务器启动的好端端的在那里? 1 2 3 4 5 netstat -tunpl |grep……
阅读全文
2021年6月25日 iptables详解:iptables概念 原文作者: 朱双印 原文链接: https://www.zsythink.net/archives/1199 这篇文章会尽量以通俗易懂的方式描述iptables的相关概念,请耐心的读完它。 防火墙相关概念 此处先描述一些相关概念。 从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。 主机防火墙:针对于单个主机进行防护。 网络……
阅读全文
2021年6月22日 i:=i ? Golang Block 到底是什么? 怎么就能解决闭包变量冲突了? 什么? 你告诉我 i:=i 不仅合法,而且还常用。甚至能解决并发编程中的变量冲突? 以下这段代码出自 golang 官方 的 Effective GO 并发编程章节。 为了解决 goroute 中变量 req 冲突, 使用了语句 req := req https://golang.org/doc/effective_go#concurrency 1 2 3 4 5 6 7 8 9 10 func Serve(queue chan *Request) { for req := range queue { req := req // Create new instance of req for the goroutine. sem <- 1 go func() {……
阅读全文
2021年6月21日 变量在 defer 中的值, 其实在问变量的作用域 有没有想过, 面试中经常问的 变量在 defer 之后的值, 其实是在问 函数变量的作用域 简单的说, defer 就是将当前操作放入 堆 中, 等待触发 return 的时候再拿出来执行。 符合堆的特色, 先进后出。 从细节来了, 还需要注意 变量 在 defer 中的 作用域 ? 函数 的 执行操作 是在 入堆前还是后 ? defer 中的函数……
阅读全文