
Golang
文章平均质量分 94
c-rain
你唯一所知,就是你一无所知
展开
-
【Golang源码分析】Golang如何实现自举 - 程序入口点(五)
根据上一章的内容得知,其实不同系统的可执行文件都有自己的格式。只要生成对应的格式后,并且有执行权限就可以执行。 那么问题来了,所说的程序入口点到底是什么?可编译性语言,不同的语言的入口点不一样,大多数的都叫main。那么不能叫其他的吗?main真的是入口点吗?好像有很多问题需要探索,需要去挖掘。 既然这么多问题,就带着问题来看看go1.3的入口点是什么?1.程序入口点 说到程序入口点,这个其实很容易理解,就是程原创 2021-11-08 15:42:39 · 974 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - 6l的链接过程(四)
接到催更的信息,其实还是很高兴。本来忙了很长一段时间为生活奔波,想给自己一个假期。后来脑子里响起了莎士比亚的一句话“如果一年到头如假日,岂不像连日工作那样疲乏?”,然后还是决定放下安逸的生活,继续去探索。 经过最近一段时间的忙碌,对生活也多了一些重新的认识。人活着不要盲目,不要止步不前,不要高估自己的实力,也不要低估自己的能力,多一些自我审视,反复review或许在生活上、工作上走的会更远~ 一顿感概之后还是要回归主题,上一篇文章说到了原创 2021-11-04 17:52:51 · 723 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - 6g的编译过程(三)
很长的一段时间没有写文章了,因为忙着出版书籍,以及双减的影响有些懈怠。Golang自举这个系列还是接着之前的《【Golang源码分析】Golang如何实现自举 - dist介绍》一文中继续写,由于linux下go1.3编译*.c文件会调用gcc,编译go文件会调用“/mnt/pkg/tool/linux_amd64/6g”,所以本篇文章主要研究6g,以及go1.3源码编译过程。1.g6简单回顾 在go1.3中其实一部分go的源代码还处于c源码实现,其中一部分原创 2021-11-03 16:15:18 · 792 阅读 · 0 评论 -
【kubernetes源码分析】解析apiserver资源类型(一)
前言 2021年开始第4个月了,由于工作过于繁忙的缘故很久没有开始文章的写作。其实一直以来我个人把写文章这件事,当作推进自己学习成长的一种方式。 这篇文章是kubernetes源码分析的第一个主题,后续会陆续更新。大致的纲要为client-go、控制器、调度器、自定义控制器、operator、网络几个方面。 当操作资源与apiserver进行通信时,平时都是直接编写YAML资源文件,通过kubectl来提交创建对应等资源对象,那么它究竟原创 2021-04-09 18:18:19 · 810 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举 - dist介绍(二)
前言 根据《Golang如何实现自举(一)》的相关引导,知道了go1.3的go编译是需要go_bootstrap、然而生成go_bootstrap,需要dist工具进行生成。那么本期主要关注dist工具。1.dist工具介绍 其实dist工具是属于go的一个引导工具,它负责构建C程序(如Go编译器)和go工具的初始引导副本。它也可以作为一个包罗万象用shell脚本替换以前完成的零工。通过“go tool dist”命令可以操作该工具。该工具不同系统下对应在p原创 2021-01-11 20:41:09 · 940 阅读 · 0 评论 -
【Golang源码分析】Golang如何实现自举(一)
前言 在写一篇文章之前,某位大佬勾起了我对学习这个主题的欲望。刚好那天带着病痛,后来根据一个Makefile字符集的问题,拿着开始研究。发现研究、研究不疼了,果然和周星驰电影《国产凌凌漆》一样精神麻醉才是最好的麻醉药。今年以来也没有给自己立啥学习目标,刚好研究Golang自举动,可以作为我今年的学习目标。该篇文章只是个开始,后续会继续迭代。 大家都知道在Go早起其实编译器并不是go去编写的,后期自举实现了编译。不过在学习Golang自举之前要了解一下Golan原创 2021-01-10 15:50:24 · 2538 阅读 · 0 评论 -
【Golang源码分析】解析执行命令complie(二)词法解析
前言:当我们使用编程语言编写代码时,我们都知道代码都是写给人看的,只是除了人能看外编译器可以编译和执行。而这些复杂的代码其实是一堆堆字符串,只是我们训练编译器拆分解读。而编译器将一堆堆代码的字符串分组的过程,我们把这个过程称之为词法解析。本文中工具:lex:3.1golang : 1.13.4 darwin/amd64dlv: 1.3.2编译过程一般分为 6 步:扫描、语法分析、语义分析、源代码优化、代码生成、目标代码优化。下图来自《程序员的自我修养》词法解析相关知识:说到词法解原创 2020-08-06 23:01:06 · 1124 阅读 · 0 评论 -
【Golang源码分析】深度解析执行命令(一)go build
前言:让我们一起来了解下go build命令都做了些啥;并进行源码追踪其过程;在golang早期版中编译器,连接器都是用C开发的。后期版本中go的编译器连接器都用go重写了一套,这一套都是开源的,我们都可以阅读;golang版本: go1.13.4 darwin/amd64调试工具: dlvdlv如果不太会用的可以看一下我前一篇文章:https://ttc.zhiyinlou.com/#/articleDetail?id=486go...原创 2020-08-06 22:59:53 · 2084 阅读 · 0 评论 -
排查API的connection reset by peer和Timeout exceeded问题
前言这是一次实际生产中遇到的问题,根据问题模拟反复试验。看完这部分代码,您可以直接了解backlog的工作原理,已经系统调优时该怎么调,不至于胡乱设置。排查API的connection reset by peer问题:晚上22点~早上6点会偶尔出现,16:00出现过一次;Client.Timeout exceeded大量出现;分析问题原因:connection reset by p...原创 2020-03-29 20:22:19 · 3496 阅读 · 0 评论 -
【协议分析】rpcx网络协议分析之kcp数据传输
前言:KCP是一个可靠的协议,它的延迟率比起tcp低很多。在游戏和视频推流领域广泛使用。在TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。文章中内容解析了整个kcp的传输数据数据包组成。系统: mac OS 1...原创 2020-03-24 20:52:43 · 2817 阅读 · 0 评论 -
【协议分析】rpcx网络协议分析之tcp
前言:最近在学习rpcx,为了更清楚搞懂rpcx的各种协议组成。对rpcx的协议做了一个深入学习。系统: mac OS 10.14.3golang: go1.12 darwin/amd64调试工具:lldb抓包工具:tcpdump(一)tcpdump工具使用tcpdump是一个网络抓包工具,tcpdump支持针对网络层、协议、主机、网络或端口的过滤。并提供an...原创 2020-03-19 02:05:22 · 1362 阅读 · 0 评论 -
【Codis源码】codis-proxy处理流程下(三)
前言:接着上一章讲,上一章讲了loopReader。这一块会延续上一章节继续往下讲。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2调试工具:dlvcodis源码:https://github.com/CodisLabs/codis/(一)proxy处理流程上一章中讲proxy流程时只讲了session连接部分,这一章把完整的流程串...原创 2020-03-14 22:31:27 · 677 阅读 · 0 评论 -
【Codis源码】codis-proxy处理流程上(二)
前言:客户端连接的 Redis 代理服务, 实现了 Redis 协议。代理部分极为关键,它负责转发请求,以及汇总数据结果。codis-proxy的处理流程比较长,本章节会先叙述一部分,比如说loopReader。剩下的下一个章节继续叙述。golang版本: go1.13.5 darwin/amd64codis版本:codis 3.2参考资料:RESP协议:https://redis....原创 2020-03-11 23:42:22 · 778 阅读 · 0 评论 -
【Codis源码】初识codis与Codis-FE源码(一)
前言:codis 是一个分布式的redis解决方案,对于上层业务来说,连接到Codis Proxy和连接原生的Redis Server没有显著区别。上层可以像使用单机的redis一样使用。Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。codis是有golang +...原创 2020-03-09 23:22:34 · 828 阅读 · 0 评论 -
【Golang源码分析】golang的启动原理
前言:随着技术的发展,大多的PHPer都开始转型golang。这个也是golang因为go的一些特别深受大家喜爱。我们团队也在试水,在内部的一些小项目上做了试探。在此同时我作为试探的一员身先士卒。从中也琢磨到一些技巧希望能和大家一起学习共勉.一.前期准备:go版本: go1.13.4由于是做源码分析调试,我们必须找到适合自己的工具。咱们调试的话可以考虑几种工具1)gdb lin...原创 2020-01-07 21:50:10 · 1421 阅读 · 0 评论