白话Go内存模型&Happen-Before

2021-03-04
阅读 4 分钟
4.6k
当多个goroutine并发同时存取同一个数据时必须把并发的存取操作序列化。在Go中保证读写的序列化可以通过channel通信或者其他同步原语(例如sync包中的互斥锁、读写锁和sync/atomic中的原子操作)。

线上数据被回滚两次我都做了哪些不正确的操作

2020-12-07
阅读 3 分钟
1.8k
经历了这两次事故后,笔者觉得最大的悲哀莫过于半夜打电话给DBA请求帮忙恢复数据。程序猿和PM之间的战斗往往还有来有回,而笔者碰上DBA之后,那可真是求人办事,怎么怂怎么来,只要DBA大爷高兴!

码了2000多行代码就是为了讲清楚TLS握手流程

2020-11-28
阅读 18 分钟
3.9k
呼,这篇文章的准备周期可谓是相当的长了!原本是想直接通过源码进行分析的,但是发现TLS握手流程调试起来非常不方便,笔者怒了,于是实现了一个极简的net.Conn接口以方便调试。码着码着,笔者哭了,因为现在这个调试Demo已经达到2000多行代码了!

一个隐藏在方法集和方法调用中且易被忽略的小细节

2020-11-23
阅读 3 分钟
1k
作为一个长期从事Go语言开发的程序猿,笔者不敢说自己是老油条但也勉强算一个小油条。然而就在今天,笔者研究TLS/SSL握手源码的时候,突然灵光一闪,想到了一个和自己认知不符的现象,于是赶紧写了一个例子验证一番,结果当头一棒直到码这篇文章时依旧懵逼。

深入剖析go中字符串的编码问题——特殊字符的string怎么转byte?

2020-10-08
阅读 5 分钟
8.6k
前段时间发表了Go中的HTTP请求之——HTTP1.1请求流程分析,所以这两天本来打算研究HTTP2.0的请求源码,结果发现太复杂就跑去逛知乎了,然后就发现了一个非常有意思的提问“golang 特殊字符的string怎么转成[]byte?”。为了转换一下心情, 便有了此篇文章。

为什么go中的receiver name不推荐使用this或者self

2020-10-02
阅读 3 分钟
3.8k
在日常的开发中我们除了定义函数以外, 我们还会定义一些方法。这本来没有什么, 但是一些从PHP或者其他面向对象语言转GO的同学往往会把receiver name命名为this, self, me等。

for-range造就循环永动机?快来看看go中for-range的那些事!

2020-09-28
阅读 1 分钟
2k
答: 对于所有的range循环, Go语言会在编译期间将原切片或者数组赋值给一个新的变量ha, 在赋值的过程中就发生了拷贝, 所以我们遍历的切片已经不是原始的切片变量了

Go中的HTTP请求之——HTTP1.1请求流程分析

2020-09-25
阅读 23 分钟
5.5k
http是目前应用最为广泛, 也是程序员接触最多的协议之一。今天笔者站在GoPher的角度对http1.1的请求流程进行全面的分析。希望读者读完此文后, 能够有以下几个收获:

go runtime debug 小技巧

2020-09-20
阅读 3 分钟
4.4k
本意是打算研究一下go程序的启动流程,然后就去网上搜索了一下入门教程。结果令我有点沮丧,搜到的几乎所有文章开篇都是通过GDB调试, 然后就是不同平台下的汇编代码。。。

我擦~字符串转字节切片后,切片的容量竟然千奇百怪

2020-09-17
阅读 9 分钟
1.6k
来自公众号:新世界杂货铺神奇的现象切片, 切片, 又是切片!前一篇文章讲的是切片, 今天遇到的神奇问题还是和切片有关, 具体怎么个神奇法, 我们来看看下面几个现象现象一 {代码...} 现象二 {代码...} 现象三 {代码...} 现象四 {代码...} 现象五 {代码...} 分析到这儿我已经满脑子问号了字符串变量转切片一个小小的字...

切片真的是引用类型嘛

2020-09-14
阅读 4 分钟
3.7k
来自公众号:新世界杂货铺注: 以下仅代表个人看法, 如果和大部分文章内容不一致,还请酌情参考灵魂三问Q1. 引用和指针的区别是什么?答: 其实他们的区别我也说不清楚, 但是他们都有一个共同点, 那就是他们能够指向真实的值, 操作他们会改变真实的值Q2. 在go中有指针了我们为什么还要有提出引用的概念?答:很明显这...