go-zero rest 源码学习笔记
概述 go-zero 基于 net/http 标准库实现了一套 rest web 框架。在使用 goctl 快速开发的同时,也需要了解 go-zero 内部做了什么。本文结合 go-zero rest学习其中的源码,力图做到知其所以然。 源码 流程图 ...
概述 go-zero 基于 net/http 标准库实现了一套 rest web 框架。在使用 goctl 快速开发的同时,也需要了解 go-zero 内部做了什么。本文结合 go-zero rest学习其中的源码,力图做到知其所以然。 源码 流程图 ...
概述 在使用 Go 开发时几乎都会用到 net/http 标准库。但是,对库的内部实现不了解,仅限于会用。遇到问题容易懵,比如: 长连接和短连接有什么区别?具体什么实现原理? net/http 如何处理并发请求? net/http 有用到缓存吗?缓存用来干什么? …… 单个问题各个击破,不如深入梳理下 net/http 标准库一网打尽。本文将深入学习 net/http 标准库,力图做到知其然知其所以然。 ...
概述 使用 Go 开发并发程序很容易,一个 go 关键字就可以启动协程处理任务。Go 创建一个 goroutine 只需要 2K 内存空间,并且 go 协程上下文信息仅存储在两个寄存器中,对于 Go 运行时来说,切换上下文特别快。 ...
概述 sync.pool 对象池可以用来复用临时对象,减少内存压力,降低 GC 压力。 示例 基本用法 1type Worker struct{} 2 3func (w *Worker) Name() string { 4 return "worker" 5} 6 7func main() { 8 workerPool := sync.Pool{New: func() interface{} { 9 return Worker{} 10 }} 11 12 worker := workerPool.Get().(Worker) 13 defer workerPool.Put(worker) 14 15 name := worker.Name() 16 fmt.Println(name) 17} sync.pool 是单对象池,不是多对象池。基本使用方法是 Get 和 Put 方法,Get 用来从对象池中取对象,Put 用来将不用的对象放回对象池中。 ...
概述 在上一篇文章中介绍了 raft 读请求源码走读,本文继续结合 etcd-raft 源码介绍 raft 写请求流程。 需要说明的是,本文使用的是单节点集群环境,后续会补充多节点集群环境加以介绍。 ...
概述 raft-example 提供了一个简化版的 KV 存储,本文围绕 raft-example 对读请求进行源码走读。 源码版本为 etcd release-3.6。 raftexample 程序结构 raftexample 程序结构如下所示: 1➜ raftexample git:(release-3.6) ✗ tree 2. 3├── Procfile 4├── README.md 5├── doc.go 6├── httpapi.go 7├── kvstore.go 8├── kvstore_test.go 9├── listener.go 10├── main.go 11├── raft.go 12├── raft_test.go 13└── raftexample_test.go etcd raft 作为 raft 库只实现 raft 算法层的内容,对于节点通信,键值存储等都不涉及,需要用户自己提供。本文只介绍 raft 算法和存储相关内容,对节点通信等不做介绍。 ...
Go 源码编译流程 Go 编译源代码需要经过编译,链接过程。通过以下示例看 Go (Go 版本为 v1.24.1)语言是如何编译源码的。 首先,代码目录结构如下: 1➜ demo1 git:(main) ✗ tree ./ 2./ 3├── cmd 4│ └── app1 5│ └── main.go 6└── pkg 7 └── pkg1 8 └── pkg1.go 9 10// main.go 11package main 12 13import "github.com/TroyXia/effective-go-book/chapter3/demo1/pkg/pkg1" 14 15func main() { 16 pkg1.Func1() 17} 18 19// pkg1.go 20package pkg1 21 22import "fmt" 23 24func Func1() { 25 fmt.Println("pkg1.Func1 invoked") 26} 编译 app1 main.go 为可执行文件: ...
介绍 Kubernetes Service 用于流量的负载均衡和反向代理,其通过 kube-proxy 组件实现。从服务的角度来看,kube-controller-manager 实现了服务注册,kube-proxy 实现了 kubernetes 集群内服务的负载均衡。 ...