深度思维者

永远年轻,永远热泪盈眶

08 2021 档案

摘要:1. 前言 隔离设计源于船舶行业,一般而言无论大船还是小船,都会有一些隔板,将船分为不同的空间,这样如果有船舱漏水一般只会影响这一小块空间,不至于把整个船都给搞沉了。 同样我们的软件服务也是一个道理,我们要尽量避免出现一个问题就把这个业务给搞挂的情况出现 那什么是「服务隔离」呢? 顾名思义,它是指将 阅读全文
posted @ 2021-08-30 23:29 failymao 阅读(1003) 评论(1) 推荐(0) 编辑
摘要:1. panic 在什么情况下使用panic? 在程序启动的时候,如果有强依赖的服务出现故障时panic退出 在程序启动的时候,如果发现有配置明显不符合要求,可以panic退出(预防编程) 其他情况下只要不是不可恢复的程序错误,都不应该直接panic,应该返回error 在程序入口处,例如gin中间 阅读全文
posted @ 2021-08-08 23:51 failymao 阅读(643) 评论(0) 推荐(0) 编辑
摘要:这里列举的Go语言常见坑都是符合Go语言语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。 1. 可变参数是空接口类型 当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数展开的问题。 package main import "fmt" func main() { v 阅读全文
posted @ 2021-08-04 07:35 failymao 阅读(1584) 评论(3) 推荐(4) 编辑
摘要:1. 简介 为了确保一致性构建,Go引入了go.mod文件来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。 考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构 阅读全文
posted @ 2021-08-03 07:03 failymao 阅读(9896) 评论(0) 推荐(1) 编辑
摘要:1. 简介 GOPATH模式下,依赖包存储在$GOPATH/src,该目录下只保存特定依赖包的一个版本,而在GOMODULE模式下,依赖包存储在$GOPATH/pkg/mod,该目录中可以存储特定依赖包的多个版本。 需要注意的是$GOPATH/pkg/mod目录下有个cache目录,它用来存储依赖包 阅读全文
posted @ 2021-08-02 23:00 failymao 阅读(609) 评论(1) 推荐(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 阅读(1418) 评论(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 阅读(1278) 评论(0) 推荐(0) 编辑
摘要:1. 版本选择机制 使用go get <pkg>来获取某个依赖,如果没有特别指定依赖的版本号,go get会自动选择一个最优版本,并且如果本地有go.mod文件的话,还会自动更新go.mod文件. 事实上除了go get,go build和go mod tidy也会自动帮我们选择依赖的版本。这些命令 阅读全文
posted @ 2021-08-01 22:36 failymao 阅读(7763) 评论(0) 推荐(0) 编辑
摘要:1.indirect含义 在使用 Go module 过程中,随着引入的依赖增多,也许你会发现go.mod文件中部分依赖包后面会出现一个// indirect的标识。这个标识总是出现在require指令中,其中//与代码的行注释一样表示注释的开始,indirect表示间接的依赖。 比如开源软件 Ku 阅读全文
posted @ 2021-08-01 17:21 failymao 阅读(3080) 评论(0) 推荐(0) 编辑