深度思维者

永远年轻,永远热泪盈眶

上一页 1 2 3 4 5 6 ··· 12 下一页
摘要: 1. 令牌桶 1.1 原理 我们以 r/s 的速度向桶内放置令牌,桶的容量为 b , 如果桶满了令牌将会丢弃 当请求到达时,我们向桶内获取令牌,如果令牌足够,我们就通过转发请求 如果桶内的令牌数量不够,那么这个请求会被缓存等待令牌足够时转发,或者是被直接丢弃掉 由于桶的存在,所以令牌桶算法不仅可以限 阅读全文
posted @ 2021-09-01 07:57 failymao 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 1. 前言 隔离设计源于船舶行业,一般而言无论大船还是小船,都会有一些隔板,将船分为不同的空间,这样如果有船舱漏水一般只会影响这一小块空间,不至于把整个船都给搞沉了。 同样我们的软件服务也是一个道理,我们要尽量避免出现一个问题就把这个业务给搞挂的情况出现 那什么是「服务隔离」呢? 顾名思义,它是指将 阅读全文
posted @ 2021-08-30 23:29 failymao 阅读(334) 评论(1) 推荐(0) 编辑
摘要: 1.前言 前面的章节讲述了项目结构, 依赖注入,API设计,包管理,单元测试。。。基本上还是将工程化当中的大部分东西都讲到了。 结合前面文章中提到的各种知识来看一下如何将一个老的项目迁移到新的项目结构当中来,这里面的坑也非常的多。 2. 重构前 2.1 目录结构 你的目录结构可能是这样的。 ├── 阅读全文
posted @ 2021-08-25 23:36 failymao 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 1. 前言 很多人都提到过测试的重要性,而在所有的测试类型当中,以单元测试为代表的单元测试无疑是成本最小,性价比最高的一种,而且有的公司为了保证质量会要求单元测试覆盖率的指标 那么对于Go程序而言,项目结构上进行单元测试的编写,如何可以做到又快又好? 2. 单元测试简明教程 2.1 go test 阅读全文
posted @ 2021-08-20 22:15 failymao 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 1. panic 在什么情况下使用panic? 在程序启动的时候,如果有强依赖的服务出现故障时panic退出 在程序启动的时候,如果发现有配置明显不符合要求,可以panic退出(预防编程) 其他情况下只要不是不可恢复的程序错误,都不应该直接panic,应该返回error 在程序入口处,例如gin中间 阅读全文
posted @ 2021-08-08 23:51 failymao 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 这里列举的Go语言常见坑都是符合Go语言语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。 1. 可变参数是空接口类型 当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数展开的问题。 package main import "fmt" func main() { v 阅读全文
posted @ 2021-08-04 07:35 failymao 阅读(344) 评论(2) 推荐(2) 编辑
摘要: 1. 简介 为了确保一致性构建,Go引入了go.mod文件来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。 考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构 阅读全文
posted @ 2021-08-03 07:03 failymao 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 GOPATH模式下,依赖包存储在$GOPATH/src,该目录下只保存特定依赖包的一个版本,而在GOMODULE模式下,依赖包存储在$GOPATH/pkg/mod,该目录中可以存储特定依赖包的多个版本。 需要注意的是$GOPATH/pkg/mod目录下有个cache目录,它用来存储依赖包 阅读全文
posted @ 2021-08-02 23:00 failymao 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 1.简介 在go.mod中通常使用语义化版本来标记依赖,比如v1.2.3、v0.1.5等。因为go.mod文件通常是go命令自动生成并修改的,所以实际上是go命令习惯使用语义化版本。 诸如v1.2.3和v0.1.5这样的语义化版本,实际是某个commit ID的标记,真正的版本还是commit ID 阅读全文
posted @ 2021-08-02 07:29 failymao 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 Go module的版本选择机制,其中介绍了一个Module的版本号需要遵循v<major>.<minor>.<patch>的格式,此外,如果major版本号大于1时,其版本号还需要体现在Module名字中。 比如Module github.com/RainbowMango/m,如果其版 阅读全文
posted @ 2021-08-02 07:14 failymao 阅读(67) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 12 下一页
Fork me on GitHub