golang gin 使用 context 实现 ioc

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, 并实现了该接口。 虽然……

阅读全文

golang 使用 Context 实现 IoC 容器

golang 使用 Context 实现 IoC 容器 参考文章 控制反转(IoC)与依赖注入(DI) 指出了依赖注入可以降低程序的耦合性。 能更好的拆分功能与基础设施。 那么在 golang 中又怎么实现呢? 代码地址 golang-context-ioc.go 实现了一个 MysqlDriver 实现我们所有的数据存取操作。 并在全局域中实例化了一个对象 my。 在 main.go 中创建了一个 ctx := context.Background() 使用使用 ctx 作为 IoC 容器, 使……

阅读全文

分支删除触发 gitlab CI

分支删除触发 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……

阅读全文

netfilter-五链四表 - 为什么服务器没有监听 80 端口却被k3s占用了

netfilter 五链四表 - 为什么服务器没有监听 80 端口却被k3s占用了 其实标题已经给出答案了。 希望大家都能夯实基础, 万事逃不过一个 道理和规则 。 现象 一天,发现服务器上 80 端口不能正常访问了, 无论怎么都是 404 page not found 。 这就奇怪了。 ssh 登录终端, 查看端口监听情况, nginx 服务器启动的好端端的在那里? 1 2 3 4 5 netstat -tunpl |grep……

阅读全文

iptables详解:iptables概念

iptables详解:iptables概念 原文作者: 朱双印 原文链接: https://www.zsythink.net/archives/1199 这篇文章会尽量以通俗易懂的方式描述iptables的相关概念,请耐心的读完它。 防火墙相关概念 此处先描述一些相关概念。 从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。 主机防火墙:针对于单个主机进行防护。 网络……

阅读全文

i:=i ? Golang Block 到底是什么? 怎么就能解决闭包变量冲突了?

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() {……

阅读全文

Golang知识点(defer): 面试经常变量在 defer 中的值, 其实在问变量的作用域

变量在 defer 中的值, 其实在问变量的作用域 有没有想过, 面试中经常问的 变量在 defer 之后的值, 其实是在问 函数变量的作用域 简单的说, defer 就是将当前操作放入 堆 中, 等待触发 return 的时候再拿出来执行。 符合堆的特色, 先进后出。 从细节来了, 还需要注意 变量 在 defer 中的 作用域 ? 函数 的 执行操作 是在 入堆前还是后 ? defer 中的函数……

阅读全文

dnsx - 一款支持多解析商的命令行 dnsx 客户端

dnsx - 一款支持多解析商的命令行 dnsx 客户端 多支持多运营商的 DNS 命令行 客户端。 Usage 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 DNSx 配置管理 DNS 解析 Usage: dnsx [command] Available Commands: add 添加域名解析 configure 管理配置文件 delete 删除解析记录 help Help about any command search 查询记录信息 switch 切换域名状态 Flags: -c, --config string config file (default "$HOME/.dnsx/dnsx.json") -h, --help help for dnsx -p, --profile string profile (default "default") Use "dnsx [command] --help" for more information about a command. dnsx profile configure dnsx……

阅读全文

5分钟k3s - k3s 使用外部数据库实现高可用

5分钟k3s - k3s 使用外部数据库实现高可用 hostname ipaddr master01 192.168.0.12 master01 192.168.0.45 agent01 192.168.0.111 1. 安装外置数据库 1 2 3 4 5 6 # 1. 安装一个外置数据库 # yum install mariadb mariadb-server ## ubuntu apt update apt install -y mysql-server 适配 mysql8.0 创建用户 1 2 3 4 5 6 7 8 -- mysql 8.0 创建解决办法: -- 创建账户:create user '用户名'@'访问主机' identified by '密……

阅读全文

我用写了一个 gitlab 代码合并机器人, 帮老板每个月省了 100 万(附源码)

我用写了一个 gitlab 代码合并机器人, 帮老板每个月省了 100 万 原文链接: https://tangx.in/posts/2021/06/16/gitlab-mergebot/ gitlab merge request robot 是一个 golang 编写的 gitlab mr 请求处理扩展服务。 由于 gitlab(free plan) 的 Merge Request 功能有限, 不能支持多人 Code Reivew。 因此引入第三方机器人进行 MR 合法性仲裁。 设计思路 目标的安全: 使用 目标项目和分支 中的 .mergebot.yml 配置作为机器人判定配置 有意义的文字信息:……

阅读全文

福利派送

  • (免费星球)「运维成长路线」

  • 又拍云免费 CDN

最近文章

分类

标签

其它