基于 Docker 的 pubsub 包实现的gRPC的发布与订阅 基于 Docker 的 pubsub 包实现的 gRPC 的发布与订阅1. 创建对应的文件和目录1234567mkdir pubsubcd pubsubgo mod init pubsubmkdir proto publisher subscribetouch server.go 2. 创建 proto 文件12cd prototouch pubsub.proto pubsub.proto 2021-11-22 Go
Go 微服务可用性设计 Go 微服务可用性设计知识点隔离服务隔离动静隔离如 CND 缓存加速、mysql LRU 算法改进 业务可以拆成两张表,静态表(字段机会不会改)和动态表(字段经常改) 读写隔离 主从 CQRS 轻重隔离 核心:服务按核心与否进行分离,越核心的服务可用性要求也高 快慢 热点 小表广播: 存为到内存,定期更新 主动预热:旁路预热 物理隔离 线程:使用线程池,不同业务逻辑用不同的池子 进程:容器 2021-11-17 Go
Go goroutine 并发编程 对自己创建的 goroutine 负责 请将是否异步调用的选择权交给调用者,不然很有可能大家并不知道你在这个函数里面使用了 goroutine 如果你要启动一个 goroutine 请对它负责 永远不要启动一个你无法控制它退出,或者你无法知道它何时推出的 goroutine 启动 goroutine 时请加上 panic recovery 机制,避免服务直接不可用 造成 goroutine 泄漏的 2021-11-12 Go
Go error panic or error 在 Go 中 panic 会导致程序直接退出,是一个致命的错误,如果使用 panic recover 进行处理的话,会存在很多问题 性能问题,频繁 panic recover 性能不好 容易导致程序异常退出,只要有一个地方没有处理到就会导致程序进程整个退出 不可控,一旦 panic 就将处理逻辑移交给了外部,我们并不能预设外部包一定会进行处理 什么时候使用 pan 2021-10-27 Go
Go 错误处理 Panic 和 Recover Go 错误处理 Panic 和 Recover Go 中没有错误机制 error 类型实现了 error 接口 123type error interface { Error() string} 可以通过 errors.New 来实现快速创建错误信息 1errors.New("n must be in the range [0,10] Panic 的基本定义 2021-10-20 Go
Go 函数 Go 函数函数声明 关键字 func 用来声明一个函数 函数可以有一个或者多个参数,每个参数后面带有不同的类型,通过,分隔 函数可以返回多个值 如果只有一个返回值且不声明返回值变量,那么你可以省略 包括返回值 的括号 如果没有返回值,那么就直接省略最后的返回信息 如果有返回值, 那么必须在函数的外层添加 return 语句 所有的参数都是值传递: slice, map, channel 会有传引用 2021-10-20 Go
Go 面向对象 Go 面向对象实例创建及初始化 基本使用 123456789101112131415161718type Employee struct { Id int Name string Age int}e := Employee{"0", "Bob", 20}e1 := Employee{name: &q 2021-10-20 Go
Go 内置的 JSON 解析 Go 内置的 JSON 解析 利用反射实现,通过 FelidTag 来标识对应的 json 值 1234567891011121314type BasicInfo struct { Name string `json:"name"` Age int `json:"age"`}type JobInfo struct & 2021-10-20 Go
Go Channel 通道 Go channel基本语法和需要注意的点 语法定义 1var channel chan [type] * 使用 `<-` 传递数据 * `chan <- data` 发送数据到通道,向通道中写数据 * `data <- chan` 获取通道中的数据,从通道中读取数据 注意的点 它是用于 goroutine 之间进行传递消息的 每个 channel 都有相关联的数据类型, 2021-10-20 Go
Go http 服务默认的路由规则和更好的路由 Go http 服务默认的路由规则和更好的路由Go Default Router12345678910func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request){ handler := sh.srv.Handler if handler == nil { handler = De 2021-10-20 Go