关于 Mohuishou

2018 年毕业于四川大学,目前就职于成都某大厂分部

RSS 地址: https://lailin.xyz/atom.xml

请复制 RSS 到你的阅读器,或快速订阅到 :

Mohuishou RSS 预览

如何实现支持多集群的 Kubernetes Operator?

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

第三方应用如何调用我们 kubebuilder 生成的自定义资源?

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Kubernetes 简明教程

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

k8s job 为何迟迟不能结束?

1970-01-01 08:00:00

本应该执行一次就结束的 job 为何被执行了超过 50 次?

Go 工程化(十一) 如何优雅的写出 repo 层代码

1970-01-01 08:00:00

上篇文章中我们提到了事务的几种解决方案,可以避免在 repo 中写很多不同事务的方法,这篇我们看一下怎么让 repo 层的代码看起来优雅一点

Go 工程化(十) 如何在整洁架构中使用事务?

1970-01-01 08:00:00

在上半年工程化相关的文章当中提到了我最终选用的基于整洁架构的项目目录结构,但是事务问题一直没有比较清晰的思路,今天和大家分享一些不成熟的小建议

给博客添加章节目录

1970-01-01 08:00:00

已经好几个读者朋友咨询过博客左侧的章节导航栏是怎么来的了,挤了点时间,整理了一下之前写的代码,现在大家可以直接使用了

使用 Notion Database 管理静态博客文章

1970-01-01 08:00:00

当博客文章变多了之后就发现,放在 hexo 的本地文件夹中管理就有些力不从心了

一个普通 Go 开发的三年

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

4. localhost 就一定是 localhost 么?

1970-01-01 08:00:00

这是由 localhost 域名被注册引发的血案

Go可用性(七) 总结: 一张图串联可用性知识点

1970-01-01 08:00:00

关于可用性还有很多没有讲到,但是课程上讲的比较清楚了,前面的文章主要是总结了和限流相关的知识点,今天我们就把之前总结到了的和没总结到的部分一起串联起来看一看

Go可用性(六) 熔断

1970-01-01 08:00:00

流量洪峰来临时,没有任何一个组件可以独善其身

10. 总结

1970-01-01 08:00:00

这是本系列的最后一篇文章了,做一个简单的总结吧

9. kubebuilder 进阶: 源码分析

1970-01-01 08:00:00

知其然也知其所以然,kubebuilder 在背后悄悄的做了哪些事情?

8. kubebuilder 进阶: webhook

1970-01-01 08:00:00

创建或者删除资源的时候需要对资源进行一些检查的操作,如果校验不成功就不通过。或者是需要在完成实际的创建之前做一些其他操作,这些需求如何实现?

7. kubebuilder 进阶: 测试

1970-01-01 08:00:00

Operator 的测试是一个比较头疼的问题,在 kubernetes 资源是在不断变化的,并且想要在测试的时候跑一整套的 kubernetes 环境也不是一件容易的事情,今天我们大概看一下单元测试和集成测试怎么做。

6. kubebuilder 实战: status & event

1970-01-01 08:00:00

如何给我们的 Operator 添加状态和事件信息,快速排查问题?

5. kubebuilder 实战: CRUD

1970-01-01 08:00:00

今天就从我之前遇到的一个真实需求出发完整的写一个 Operator

4. kustomize 简明教程

1970-01-01 08:00:00

makefile 当中大量存在了 kustomize 这样的命令,kustomizeb是什么,有什么用,怎么用?今天我们就一起来学习一下,在后续的文章当中,我们还会用到一些 kustomize 特性来部署不同的环境。

3. KubeBuilder 简明教程

1970-01-01 08:00:00

kubebuilder 是什么?如何使用 kubebuilder 快速创建一个 Operator?

2. Kind: 如何快速搭建本地 K8s 开发环境?

1970-01-01 08:00:00

10 分钟搭建一个本地 k8s 开发环境

1. Operator概述: 如何对 Kubernetes 进行扩展

1970-01-01 08:00:00

如何对 Kubernetes 进行扩展?

Go可用性(五) 自适应限流

1970-01-01 08:00:00

什么?机器都快挂了,限流竟然还没触发?

Go可用性(四) 漏桶算法

1970-01-01 08:00:00

10 行代码实现一个基于漏桶算法的 ip 限流中间件

Go可用性(三) 令牌桶的实现 rate/limt

1970-01-01 08:00:00

看看源码

Go可用性(二) 令牌桶原理及使用

1970-01-01 08:00:00

10行左右代码实现一个基于 ip 的 gin 限流中间件

Go可用性(一) 隔离设计

1970-01-01 08:00:00

泰坦尼克号是如何沉没的

Go并发编程(十二) Singleflight

1970-01-01 08:00:00

一起来看看 singleflight 的使用场景、说明、源码分析以及注意事项

Go工程化(九) 项目重构实践

1970-01-01 08:00:00

这是《Go 工程化》系列的最后一篇文章了, 不知道大家听完毛老师的课程或者看完我之前的哪些文章有没有进行过一些尝试,本文就会从一个“真实”的项目重构的案例来一步一步的介绍我趟过的那些坑,希望可以对大家有所启发。

Go工程化(八) 单元测试

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(七) Go Module

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(六) 配置管理

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(五) API 设计下: 基于 protobuf 自动生成 gin 代码

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(四) API 设计上: 项目结构 & 设计

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(三) 依赖注入框架 wire

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(二) 项目目录结构

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go工程化(一) 架构整洁之道阅读笔记

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(十一) 总结

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(十) 深入理解 Channel

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(九) 深入理解 Context

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(八) 深入理解 sync.Once

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(七) 深入理解 errgroup

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(六) 深入理解 WaitGroup

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(五) 深入理解 sync/atomic

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(四) 深入理解 Mutex

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(三) data race

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(二) Go 内存模型

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go并发编程(一) goroutine

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go错误处理最佳实践

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

微服务(二) 服务发现&多租户

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

微服务(一) 微服务概览

1970-01-01 08:00:00

为什么我们需要微服务,微服务究竟是些什么?

5. 栈下: 深入理解 defer

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

4. 栈上: 如何实现一个计算器

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go Struct 初始化风格的抉择

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

3. 数组下: 使用 GDB 调试 Golang 代码

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

2. 数组上: 深入理解 slice

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

1. 链表: 深入理解container/list&LRU缓存的实现

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式24-总结(更新完毕)

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式23-中介模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式22-解释器模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式21-命令模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式20-备忘录模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式19-访问者模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式18-迭代器模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式17-状态模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式16-职责链模式(Gin的中间件实现)

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式15-策略模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go模板模式14-模板模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式13-观察者模式(实现简单的EventBus)

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式12-享元模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式11-组合模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式10-门面模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式09-适配器模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式08-装饰器模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式07-桥接模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式06-代理模式(generate实现类似动态代理)

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式05-创建型模式总结

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式04-原型模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式03-建造者模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式02-工厂模式&DI容器

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

笔记-让你最快速地改善代码质量的20条编程规范

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go设计模式01-单例模式

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

一点拙见-如何写好一个技术预研报告?

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

Go Web小技巧(四)在单个仓库中支持多个 go mod 模块

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

背景

最近在更新内部的工具库的时候发现,工具仓库中其实包含了很多的模块,但是现在的版本发布都是合并在在一起发的,为了管理更加细致和直观,所以想要在一个仓库中实现实现多个模块的发布。

Go Web 小技巧(三)Gin 参数绑定

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

楔(xiē)子

在第一篇文章 简化 Gin 接口代码 当中为大家提供了一种抽象 gin 接口代码的思路,而这篇文章会为大家带来参数绑定的一些技巧。

在我们写的绝大部分的 API 代码当中,其实都是需要传递参数的,无论是通过 pathquery string 还是 body,在 gin 当中,为我们提供了一系列的 binding 方法让我们可以把这些参数绑定到一个对象中,通过还可以通过 struct tag 来对参数进行校验,不知道到大家曾今是否和遇到过相同的困惑:

  • 我创建/更新接口有时候就仅仅只相差一个 id,我是不是可以复用代码?
  • 是否可以直接用 model 层的 struct 绑定参数?

接下来本文就从这些问题出发,利用 go 的组合特点,介绍一些参数绑定上的小技巧

Go Web 小技巧(二)GORM 使用自定义类型

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

不知道大家在使用 Gorm 的时候,是否有遇到过复杂类型 ( map, struct…) 如何映射到数据库的字段上的问题?

本文分别介绍通过实现通用接口和 Hook 的方式绑定复杂的数据类型。

Go Web 小技巧(一)简化Gin接口代码

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

不知道大家在使用 Gin 构建 API 服务时有没有这样的问题:

  1. 参数绑定的环节可不可以自动处理?
  2. 错误可不可以直接返回,不想写空 return, 漏写就是 bug

本文通过简单地封装,利用 go 的接口特性,提供一个解决上述两个问题的思路

善用工具之postman高级用法概述

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

POSTMAN 是我在开发过程当中最常用到的 API 测试工具之一,虽然并不完美,但也是目前个人认为在 API 测试时最好用的客户端工具之一。

本文适用于后端,前端,移动端以及测试的同学,分三大部分从最简单的界面操作开讲,然后涉及到变量、脚本以及一些云服务相关的功能,最后将适配几个案例讲解怎么使用 POSTMAN 提高我们的工作效率。本文前半部分包含较多基础功能讲解,对已经比较熟悉使用的同学,可以选择性的跳过部分内容。

go generate and ast

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

楔(xiē)子

最近写API CURD比较多,为了结构清晰,返回值需要统一错误码,所以在一个统一的errcode包中定义错误码常量,以及其错误信息.

hexo-next-algolia-search全文搜索

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

在 hexo 中通过 algolia 实现全文搜索

docker镜像瘦身&优化

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

为什么在存储如此便宜的今天我们仍然需要对 Docker 镜像进行瘦身?

GORM避坑指南之含关联关系的更新

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

在 GORM 的文档当中有说明,使用Update, Updates时只会更新改变的字段,但是出现关联关系的时候情况似乎有了一些微妙的变化

If you only want to update changed Fields, you could use Update, Updates

Github Actions介绍&自动构建Github Pages博客

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

本文将主要讲述如何创建一个自定义的 Github Actions, 并且使用 Github Actions 完成 CI/CD 的操作

在blog中内嵌在线PPT

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

有时我们会做一些分享,分享之后可以把 PPT 脱敏之后放在博客上面,可以使用 office online 直接内嵌 PPT, 巨硬大法好

记一次net http内存泄漏

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

使用 gin

使用TravisCI自动部署Blog

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

之前博客的更新一直都是在本地运行hugo然后手动

使用Goland调试Go程序

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

在上一篇Blog当中发现了一个十分边缘的GORM的bug,由于不熟悉工具,bug的调试过程还是比较麻烦,这一篇讲一讲如何使用Goland强大的debug功能调试Go程序

一个十分边缘的gorm的bug

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

[toc]

复现代码

这个代码的触发条件比较严苛,首先必须要保证 gorm 执行的一行必须为updates语句,并且在updates(struct),并且传入的这个struct必须要包含一个直接或者间接关联的一个多态表,这些条件缺一不可

Httprouter介绍及源码阅读

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

在上一篇文章当中阅读了 Go 语言的一个高性能的 Web 框架

Gin源码阅读 从0.1开始

1970-01-01 08:00:00

注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用

最近打算开始学习一下 Gin 的源代码,现在