目录 - Go 源码阅读

第 48 期 TiDB 源码阅读之 Compiler


TiDB Compiler 内容介绍 本次分享主要讲 TiDB 的优化器框架以及具体的 SQL 执行优化原理 。主要涉及 TiDB 的 planner 模块。欢迎大家参加! PPT: TiDB Compiler.pdf 推荐阅读 TiDB 源码阅读系列文章(七)基于规则的优化 TiDB 源码阅读系列文章(八)基于代价的优化 TiDB 源码阅读系列文章(二十一)基于规则的优化 II 视频回看 TiDB 源码学习之 Executor - YouTube TiDB 源码学习之 Executor - Bilibili 问题 22:13:46 From mai yang : rule 怎么对照文
[阅读全文]

第 47 期 TiDB 源码阅读之 Executor


TiDB Executor 内容介绍 本次分享主要讲 TiDB 中 insert/update/delete/select, 以及 DDL 等是如何执行的,以及涉及到相关模块。大概会涉及以下模块: executor distsql ddl PPT: TiDB Executor 源码阅读.pdf 推荐阅读 Select 语句概览 INSERT 语句详解 DDL 源码解析 视频回看 TiDB 源码学习之 Executor - YouTube TiDB 源码学习之 Executor - Bilibili PPT: https://github.com/developer-learnin
[阅读全文]

第 46 期 TiDB 源码阅读之概览


TiDB Source Code Overview 视频回看 TiDB 源码学习之 Source Code Overview - YouTube TiDB 源码学习之 Source Code Overview - Bilibili 意见反馈 【Go夜读】《TiDB Source Code Overview》反馈 chat 答疑 20:54:52 From mai yang : 大家好,欢迎大家前来参加 Go 夜读&TiDB 源码学习! 21:22:34 From nange : Session 怎么初始化的? 21:22:46 From ccong deng : 每个连接都是跟
[阅读全文]

第 45 期 goim 架构设计与源码分析


观看视频
[阅读全文]

第 44 期 Go map 源码阅读分析


观看视频
[阅读全文]

第 43 期 gomonkey 框架设计与应用实践


观看视频
[阅读全文]

第 42 期 An Introduction to Failpoint Design


观看视频
[阅读全文]

第 41 期 golint 及 golangci-lint 的介绍和使用


观看视频
[阅读全文]

第 40 期 atomic.Value 的使用和源码分析


观看视频
[阅读全文]

第 39 期 init function 使用分析


观看视频
[阅读全文]

第 38 期 kubernetes scheduler 源码阅读


观看视频
[阅读全文]

第 37 期 从 serverless 的一个设计说起


参考资料 预习材料 pulsar-effectively-once 观看视频
[阅读全文]

第 36 期 k8s context 实践源码阅读


实践 WithValue WithCancel WithTimeout WithDeadline 基本上没有用到。 参考资料 How to correctly use context.Context in Go 1.7 How to correctly use package context 视频笔记:如何正确使用 Context - Jack Lindamood 观看视频
[阅读全文]

第 35 期 context 源码阅读


预习材料 第 35 期 Go 夜读之《context 包源码阅读》预习资料 #191 观看视频
[阅读全文]

第 34 期 Go 夜读之 plan9 汇编入门,带你打通应用和底层 by Xargin


2019.3.16 晚上 21 点 ~ 23点 直播过程中的文字讨论 (如有涉及到隐私,请告知) 21:08:32 From xiong hekuan : 几乎没有 21:08:47 From amatist Kurisu : 大佬开下麦… 21:09:02 From Laily Long : 能听到 21:09:02 From xiong hekuan : 可以 21:09:03 From 何翔宇 : 可以 21:09:06 From xiye : 能听到 21:09:09 From haoc7 : 听到了 21:09:12 From 星星 : 挺清楚的 21:11:01 From am
[阅读全文]

第 33 期 Go 夜读之 Go defer 和逃逸分析


2019.3.7 晚上 观看视频
[阅读全文]

第 32 期 Go 夜读之 etcd raft 源码阅读


etcd raft 阅读 etcd 版本:3.3.10 2019.3.2 晚上 总结 etcd里的raft模块只实现了raft共识算法,而像消息的网络传输,数据存储都由上层应用来完成。 下面是各个文件(夹)的功能简介: raftpb 用Protocol Buffer定义了一些需要序列化的数据结构,比如Entry和Message。 log_unstable.go unstable数据结构表示用于还没有被用户层持久化的数据,它维护了两部分内容snapshot和entries。 storage.go 这个文件定义了一个Storage接口,应用层需要实现这个接口,以提供存储和查询日志的能
[阅读全文]

第 31 期 Go 夜读之 flag 包源码阅读


Go 标准包阅读 Go 版本:go 1.11.5 总结 *v.URL = *u flag 下有 package flag_test?? init 中定义相同的 stringvar ; 当一个文件中出现多个 init 函数时,他们都会被加载,并且以 init 出现在文件中的前后顺序执行。 type Value interface { String() string Set(string) error } type Getter interface { Value Get() interface{} } type boolFlag interface { Value IsBoolFlag(
[阅读全文]

第 30 期 Go 夜读之 go mod 源码阅读 part 4


Go 标准包阅读 Go 版本:go 1.11.5 net/http `` 换行 本期没有视频回放。 观看视频
[阅读全文]

第 29 期 Go opentracing jaeger 集成及源码分析


Go opentracing jaeger 集成及源码分析 一、分布式追踪论文 论文地址:http://bigbully.github.io/Dapper-translation/ 为什么要用分布式追踪 当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。 互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、 可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。 因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。 分布式系统调用过程 使用分布式追踪要留意哪些问题 低损耗 跟踪系统对在线服务的影响应该做到足够小。
[阅读全文]

第 28 期 Go 夜读之 go mod 源码阅读 part 3


Go 标准包阅读 Go 版本:go 1.11.5 学到的内容 json:",omitempty" 方法一: if path[len(path)-1] == '/' { return fmt.Errorf("trailing slash") } 方法二: strings.HasSuffix(path, "/") benchmark 方法一: strings.TrimSuffix(pathMajor, "-unstable") 方法二: i := len(path) if strings.HasSuf
[阅读全文]

第 27 期 Go 夜读之 go mod 源码阅读 part 2


Go 标准包阅读 Go 版本:go 1.11.5 学到的内容 1. mf := new(modfile.File) 2. lineno++ 感觉是无用的代码? dep.go 中 ParseGopkgLock 方法第48行有用到 lineno ,会打印出 strconv.Unquote 解析错误的文件名和行号 if len(val) >= 2 && val[0] == '"' && val[len(val)-1] == '"' { q, err := strconv.Unquote(val) // Go unq
[阅读全文]

第 26 期 Go 夜读之手把手教你基于 Github+Netlify 构建自动化持续集成的技术团队博客


Github Netlify 观看视频
[阅读全文]

第 25 期 TSDB 引擎介绍,对比及存储细节


TSDB 引擎介绍,对比及存储细节 OpenTSDB InfluxDB Druid 观看视频
[阅读全文]

第 24 期 go mod 源码阅读 part 1


Go 标准包阅读 Go 版本:go 1.11.5 观看视频 阅读重点 os.Stat filepath.SplitList os.Getwd() switch sync.Once os.IsNotExist(errMod) MustQuote AutoQuote modcmd.runGraph format := func(m module.Version) string { if m.Version == "" { return m.Path } return m.Path + "@" + m.Version } sort.Slice 什么是 go
[阅读全文]

第 23 期 Drone 简单介绍和部分源码分析


观看视频 参考资料 基于 gogs/gitlab 和 drone 搭建的 CI/CD 平台 Drone 源码分析之同步 repos 的策略研讨 Drone 源码分析之数据库初始化
[阅读全文]

第 22 期 Go 开发工具讨论


观看视频
[阅读全文]

第 21 期 Go errors 处理及 zap 源码分析


观看视频
[阅读全文]

第 20 期 go test 及测试覆盖率


观看视频
[阅读全文]

第 19 期 如何开发一个简单高性能的http router及gorouter源码分析


观看视频
[阅读全文]

第 18 期 去中心化加密通信框架 CovenantSQL/DH-RPC的设计


观看视频
[阅读全文]

第 17 期 grpc 开发及 grpcp 的源码分析


观看视频
[阅读全文]

第 16 期 Go 快速入门


创建一个新函数 faas-cli new –lang node hell-node 构建函数 faas-cli build -f hello-node.yml 推送函数到docker仓库 faas-cli push -f hello-node.yml 部署函数 faas-cli deploy -f hello-node.yml 稍等几秒钟,等待部署,然后就可以从postman发送get或者post请求。 在rancher中的状态 函数的状态
[阅读全文]

第 16 期 gateway-reading


OpenFaaS的Gateway是一个golang实现的请求转发的网关,在这个网关服务中,主要有以下几个功能: UI 部署函数 监控 自动伸缩 架构分析 从图中可以发现,当Gateway作为一个入口,当CLI或者web页面发来要部署或者调用一个函数的时候,Gateway会将请求转发给Provider,同时会将监控指标发给Prometheus。AlterManager会根据需求,调用API自动伸缩函数。 源码分析 依赖 github.com/gorilla/mux github.com/nats-io/go-nats-streaming github.com/nats-io/go-nats
[阅读全文]

第16期 OpenFaas 介绍及源码分析


关于我 网名: Lucas Github:https://github.com/zhenfeng-zhu 博客:https://zhenfeng-zhu.github.io/ 知乎:https://www.zhihu.com/people/zhu-zhen-feng-96/activities 专栏:https://zhuanlan.zhihu.com/openfaas-cn 微信:zhuzhenfeng1993 主要内容 OpenFaaS的简介 OpenFaaS的快速入门 OpenFaaS的基础组件 OpenFaaS的源码分析 OpenFaaS的定制 观看视频
[阅读全文]

第16期 faas-provider


faas-provider是一个模板,只要实现了这个模板的接口,就可以自定义实现自己的provider。 faas-provider OpenFaaS官方提供了两套后台provider: Docker Swarm Kubernetes 这两者在部署和调用函数的时候流程图如下: 部署一个函数 调用一个函数 provider要提供的一些API有: List / Create / Delete 一个函数 /system/functions 方法: GET / POST / DELETE 获取一个函数 /system/function/{name:[-a-zA-Z_0-9]+} 方法: G
[阅读全文]

第16期 queue-worker源码分析


异步函数和同步函数 在OpenFaaS中同步调用函数时,将会连接到网关,直到函数成功返回才会关闭连接。同步调用是阻塞的。 网关的路由是:/function/<function_name> 必须等待 在结束的时候得到结果 明确知道是成功还是失败 异步函数会有一些差异: 网关的路由是:/async-function/<function_name> 客户端获得202的即时响应码 从queue-worker中调用函数 默认情况下,结果是被丢弃的。 查看queue-worker的日志 docker service logs -f func_queue-worker 利用r
[阅读全文]

第16期 监视器 - watchdog


监视器 监视器提供了一个外部世界和函数之间的非托管的通用接口。它的工作是收集从API网关来的HTTP请求,然后调用程序。监视器是一个小型的Golang服务——下图展示了它是如何工作的: 上图:一个小型的web服务,可以为每个传入的HTTP请求分配所需要的进程。 每个函数都需要嵌入这个二进制文件并将其作为ENTRYPOINT 或 CMD,实际上是把它作为容器的初始化进程。一旦你的进程被创建分支,监视器就会通过stdin 传递HTTP请求并从stdout中读取HTTP响应。这意味着你的程序无需知道web和HTTP的任何信息。 轻松创建新函数 从CLI创建一个函数 创建函数最简单的方法是使用Fa
[阅读全文]

第 15 期 多路复用资源池组件剖析


2018-08-23 22:00:00 分享会之后的答疑。 源代码地址:pool#workshop 一个网友在分享会之后的个人理解:对是独占资源对象的复用,提升了最后的 qps,独占式方法 TestChanPool() 函数中使用了从资源池获取 worker 对象,执行完毕后再放回资源池,如果获取不到则阻塞等待,因此,100 000 请求,每个请求占用 10ms,可用 worker 对象 50 个,则最后 100 000*1050 =20s ,视频中测试结果也显示 21s 符合预期。而 TestWorkshop() 函数中使用回调函数对 worker 进行加锁,每个线程使用的那一刻是 wo
[阅读全文]

第 14 期 sync.Pool 源码分析及适用场景


Go 标准包阅读 观看视频
[阅读全文]

第 13 期 Kubernetes 入门指南


观看视频
[阅读全文]

第 12 期 golang 中 goroutine 的调度


郑宝杨(boya) 2018-08-01 listomebao@gmail.com 阅读源码前可以阅读的资料 Goroutine背后的系统知识 golang源码剖析-雨痕老师 go-intervals 也谈goroutine调度器 golang的调度模型概览 调度的机制用一句话描述: runtime准备好G,P,M,然后M绑定P,M从各种队列中获取G,切换到G的执行栈上并执行G上的任务函数,调用goexit做清理工作并回到M,如此反复。 基本概念 M(machine) M代表着真正的执行计算资源,可以认为它就是os thread(系统线程)。 M是真正调度系统的执行者,每个M就像一个勤劳
[阅读全文]

第 11 期 Golang 代码质量持续检测实践


观看视频
[阅读全文]

第 10 期 2018-06-28 线下活动


参与人数: 10 人 Go 标准包阅读 Go版本:go 1.10.2 net包 http/server.go http/request.go textproto/reader.go 读取位置 textproto/reader.go(140行) 问题 1.各个系统的回车换行符区别 注意:10.13及其以上是macOS系统 2.URI,URL和URN的区别 查看详情 3.HTTP CONNECT方法介绍 会议讨论小结 可以建立一个代理服务器到目标服务器的透明通道(tcp连接通道),中间完全不会对数据做任何处理,直接转发(支持https,一种翻墙的手段,专线独
[阅读全文]

第 9 期 2018-06-14 线下活动


参与人数: 12 人 Go 标准包阅读 Go 版本:go 1.10.2 net/http server.go h2_bundle.go 问题 WriteHeader(statusCode int) 要先调用 header.set() 再调用 WriteHeader() 然后调用 Write() 如果在调用 Write() 之后,还有比较多的逻辑要处理,则一定要紧跟着马上调一下 Flush() 然后调用 Flush() HTTP2 不支持 Hijacker 使用了 Hijacker 之后不能再使用 Request.Body type Hijacker interface
[阅读全文]

第 8 期 2018-05-31 线下活动 - Go 标准包阅读


参与人数: 10 人 Go 标准包阅读 Go 版本:go 1.10.2 net/http server.go 问题 func (s *Server) doKeepAlives() bool { return atomic.LoadInt32(&s.disableKeepAlives) == 0 && !s.shuttingDown() } 为什么要用 atomic.LoadInt32(&s.disableKeepAlives) == 0 ? 原子操作比用锁更节约一点性能。 server.go#Shutdown 不保险 panicChan := m
[阅读全文]

第 7 期 2018-05-24 线下活动 - Go 标准包阅读


参与人数: 10 人 Go 标准包阅读 Go 版本:go 1.10.1 net/http server.go 问题 Next Protocol Negotiation = NPN Expect 100 Continue support 见参考资料 header提到了:Expect和host 判断了 header里面的HOST,但是后面又删除,为什么? server.go#L980 delete(req.Header, "Host") 判断是否支持 HTTP2 (isH2Upgrade) // isH2Upgrade reports whether r re
[阅读全文]

第 6 期 2018-05-17 线下活动 - Go 标准包阅读


参与人数: 12 人 Go 标准包阅读 Go 版本:go 1.10.1 strings strings.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 // Remove if golang.org/issue/6714 is fixed bp := copy(b, a[0]) return len(s) >= len(prefix) && s[0:len(prefix)] == prefix 各种开发语言都有的短路机制;字符串底层也是可以用作切片的; 为什么要判断这个错误: if c =
[阅读全文]

第 5 期 2018-05-10 线下活动 - Go 标准包阅读


参与人数: 20 人 Go 标准包阅读 Go 版本:go 1.10.1 strings strings.go(进度50%) 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 重头戏:Rabin-Karp search Rabin-Karp 算法的思想: 假设待匹配字符串的长度为M,目标字符串的长度为N(N>M); 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的hash值; 比较前面计算的两个hash值,比较次数N-M+1: 若hash值不相等,则继续计算目标字符串的下一个长度为M的字符子串的has
[阅读全文]

第 4 期 2018-04-25 线下活动


参与人数: 15 人 Go 标准包阅读 Go 版本:go 1.10.1 strings replace.go replace_test.go search.go search_test.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 Boyer-Moore 算法 延伸阅读 Boyer-Moore_string_search_algorithmde Boyer-Moore字符串搜索算法 字符串匹配的Boyer-Moore算法 grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
[阅读全文]

第 3 期 2018-04-18 线下活动


参与人数: 14 人 Go 标准包阅读 Go 版本:go 1.10.1 strings builder.go builder_test.go compare.go compare_test.go example_test.go export_test.go reader_test.go reader.go 问题清单 以下是我们在阅读过程中的一些问题,希望可以引起大家的关注,也欢迎大家提出自己的理解,最好可以给以文章总结。 defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(1)) runtime.ReadMemStats(&m1) defer
[阅读全文]

第 2 期 2018-04-11 线下分享内容


参与人数: 9 人 微服务相关的开源项目,直接根据 Github 讲解,三个相关的项目链接如下: teleport是socket框架 tp-micro是它的扩展,实现了微服务 ants是该微服务的网关、配置中心、代码生成器、部署工具之类的 语音实录 以下内容是分享活动的实录回顾。 参与人数: 9人 参与者的自我介绍 演示 xiaoneai/ants 分析 tp-micro 和 teleport 框架代码 答疑 确定线下分享形式(标准包和开源项目) 语音实录 语音实录(文字版本 by 录音宝)
[阅读全文]

第2期 2018-04-11 线下分享内容语音实录(文字版本 by 录音宝)


在开始前的话,我就先闻着大概介绍一下。我我叫李亚春。李亚坤。那个网名就是亨利出实验,然后嗯13年开始写go,嗯写过几个开盘项目,然后主要有一个爬虫用猪,这个还有这个嗯开炮。今天我们要要介绍的一个然后还有就是一个黑狗,这就是一个外部框架。我叫吴良肖,然后我啊我毕业两年,然后我是从毕业的时候开始写够的,然后到现在没有开源项目,所以我的目标就是有一个开源项目。我叫武帝陵一个比较低的,然后我是整体来说,去年年底是开始觉得自己也写两个小工具放到D卡上面,因为现在我们公司要搬到S上面,学习架构云的与。BW好,我叫朱静涛,嗯够的话,我十年吧是对就接触这个语言,然后看他语法就特别特有吸引力,跟我之前是写开心嘛
[阅读全文]

第 1 期 2018-03-21 线下分享内容


参与人数: 3 人 cannot take address of temporary variables 延伸阅读 https://stackoverflow.com/questions/10535743/address-of-a-temporary-in-go https://stackoverflow.com/questions/40926479/take-the-address-of-a-character-in-string https://golang.org/ref/spec#Address_operators neochain teleport Teleport 是一个
[阅读全文]