![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 94
IceberGu
icebergu.com
展开
-
深入 kubernetes 的 Wait 工具包
wait 包提供了通过轮询或者监听一个条件的修改(关闭channel, ctx.Done,…)来执行指定函数的工具函数,这些函数可以分为四大类Until 类:根据 channel 的关闭或者 context Done 的信号来结束对指定函数的轮询操作Condition 类:不只是会根据 channel 或者 context 来决定结束轮询,还会判断轮询函数的返回值来决定是否结束Wait 类:Backoff 类:在介绍具体函数前,介绍一下用于对轮询的时间间隔进行抖动干扰的函数 Jitter原创 2021-03-27 00:20:31 · 1409 阅读 · 1 评论 -
Go 与异步 IO - io_uring 的思考
本来准备写一篇详细关于 io_uring 的中文文章,不过在使用上官方的一些文章写的已经非常详细,简单的拿来翻译感觉又失去了乐趣于是便借鉴 liburing,配合 Go 提供的并发机制实现了一个 golang 版本的异步 IO 库 —— iouring-goGolang 中并发 IO 的现状对于 Go 这种本身便是为并发而生的语言来说,使用 io_uring 这种系统级异步接口也不是那么的迫切比如对于文件的读写以及 socket 的操作都会通过 netpoll 来进行优化,当文件/套接字可读可写.原创 2020-10-22 13:58:49 · 3432 阅读 · 0 评论 -
Go Test 总结
golang test 要求我们以 *_test.go 来创建测试文件,注意 以 _ 包括(_test.go) 或者 . 开头的文件都会被忽略测试文件中可以包含 测试函数,基准测试函数, 示例函数测试函数必须以 TestXxx 命名,其中Xxx不能小写字母开头基准测试函数必须以 BenchmarkXxx 命名示例函数必须以 ExampleXxx 命名go build 时,并不会将 *_test.go 文件一起打包编译,所以 *_test.go 中的一些 init 或者全局变量,并不能在执行中访原创 2020-09-17 16:04:36 · 2841 阅读 · 0 评论 -
Golang 深入源码 —— select 与 channel
Golang 通过 select...case 语句实现了对 channel 的多路复用以及非阻塞收发操作本文将着重讲解以下问题:编译器对 select 语句的优化select 如何随机选择 case当多个 case 同时准备好后,select 又会如何选择 case原创 2020-09-03 15:54:42 · 11633 阅读 · 0 评论 -
编译 Go 程序时加入 git commit 等额外信息
在编译 Go 程序的时候如何加入一些额外的信息,比如 当前最新的 commit sha,编译的 go version 之类的通过 go build -ldflags "-X importpath.name=value’ " 赋值字符串value给指定包importpath中的变量name-ldflags 会将后边的参数传递给 go tool link 链接器go tool link 的 -X 会将字符串赋值给指定包中变量,格式是 importpath.name=value// main.gop.原创 2020-07-29 13:15:43 · 21945 阅读 · 0 评论 -
Golang 深入源码 —— channel
Don’t communicate by sharing memory, share memory by communicating.不要通过共享内存来通信,而要通过通信来实现内存共享。这句话是 Go 语言设计团队的首任负责人 Rob Pike 对并发编程的建议,也是 Go 的并发哲学,通道 Channel 便是基于这种哲学我们可以把 Channel 看做是一个先进先出(FIFO)的数据队列数据结构type hchan struct { lock mutex qcount.原创 2020-07-21 15:58:12 · 42454 阅读 · 0 评论 -
grpc 开发进阶 - 失败重试
RPC调用失败情况分析RPC 调用失败可以分为三种情况:RPC 请求还没有离开客户端RPC 请求到达服务器,但是服务器的应用逻辑还没有处理该请求服务器应用逻辑开始处理请求,并且处理失败最后一种情况是通过 server config 配置的重试策略来处理的,是本文主要讲解的内容而对于前两种情况,gRPC 客户端会自动重试,与重试策略的配置并没有太大关系因为这两种情况,服务端的逻辑并没有开始处理请求,所以始终可以重试,也被称为透明重试(transparent retries)对于第一原创 2020-05-14 18:41:54 · 26735 阅读 · 0 评论 -
Runc 与 Cgroups
Runc 可以算是启动创建容器的最后一步,其中设置 Cgroups,隔离 namespaces,配置网络,挂载相应的卷 等一系列操作本文将主要讲 runc 是如何去操作系统中的 Cgroups,实现对资源的限制和管理的Runc 支持三种方式来限制管理资源,分别是使用 Cgroups V1, Cgroups V2, Systemd本文将主要讲解 Cgroups V1, 关于 Cgroups V1 相关的基本概念可以参考 Linux Cgroups V1 介绍与使用Cgroup ManagerCgr原创 2020-05-13 15:03:03 · 14349 阅读 · 0 评论 -
grpc 开发进阶 - 传递 metadata
现在网上大部分都是 grpc 相关的介绍,真正涉及到 grpc 的配置使用的文章还是比较少的所以本系列着重介绍 grpc 开发时可以能会用到的一些配置grpc 支持在 server 端和 client 端发送 metedata,一些验证信息之类的可以放在这个里边metadata可以通过 metadata 包来构建type MD map[string][]string一个键可以对应...原创 2020-04-29 14:59:49 · 14955 阅读 · 0 评论 -
grpc 开发进阶 - 使用拦截器 interceptor
现在网上大部分都是 grpc 相关的介绍,真正涉及到 grpc 的配置使用的文章还是比较少的所以本系列着重介绍 grpc 开发时可以能会用到的一些配置拦截器在作用于每一个 RPC 调用,通常用来做日志,认证,metric 等等interfactor 分为两种unary interceptor 拦截 unary(一元) RPC 调用stream interceptor 处理 stre...原创 2020-04-28 22:13:38 · 17327 阅读 · 0 评论 -
grpc 开发进阶 - 加密传输
现在网上大部分都是 grpc 相关的介绍,真正涉及到 grpc 的配置使用的文章还是比较少的所以本系列着重介绍 grpc 开发时可以能会用到的一些配置不使用任何加密客户端创建连接的时候默认必须使用加密传输,否则会直接报错2020/04/28 15:59:53 did not connect: grpc: no transport security set (use grpc.WithI...原创 2020-04-28 16:15:07 · 16010 阅读 · 0 评论 -
grpc 开发进阶 - 使用压缩器 compressor
现在网上大部分都是 grpc 相关的介绍,真正涉及到 grpc 的配置使用的文章还是比较少的所以本系列着重介绍 grpc 开发时可以能会用到的一些配置compressorgrpc 允许用户自定义 compressor 来压缩传输的内容,并且要求在服务端和客户端都注册使用的 compressorgrpc 已经提供了一个 gzip 的压缩器,可以拿来直接使用,如果需要自定义 compres...原创 2020-04-28 15:31:38 · 16073 阅读 · 0 评论