Go 为什么不支持可重入锁?

2021-12-15
阅读 2 分钟
4.7k
大家好,我是煎鱼。程序里的锁,是很多小伙伴在写分布式应用时用的最多的一个利器之一。使用 Go 的同学里,绝大部分都有其他语言的经验,就会对其中一点有疑惑,那就是 Go 里的锁,竟然不支持可重入?为此,今天煎鱼带大家一起来了解这里的设计考量,看看为什么。可重入锁如果对已经上锁的普通互斥锁进行 “加锁” 操作,...

新提案:Go 泛型玩出花来了,switch type 登场!

2021-12-14
阅读 3 分钟
5.4k
大家好,我是煎鱼。前面写过好几篇 Go 泛型的语法、案例介绍,新的一手 Go 消息。实际上,随着一些提案被接受,新的提案也逐渐冒出。这不,我发现有了泛型后,大家可以更进一步玩出花来了。看到了一个 ”新“ 提案《proposal: spec: generics: type switch on parametric types》,讲的就是增加泛型后的参数类型上的类型开...

Proto 代码到底放哪里?

2021-12-09
阅读 2 分钟
5.7k
虽然公司已经从大单体切换为微服务化有一定的年头了,但一些细节方面的处理总会有不同的人有不同的看法,这其中一个讨论点,就是 Proto 这个 IDL 的代码到底放在哪里?

小技巧分享:在 Go 如何实现枚举?

2021-11-08
阅读 2 分钟
11.2k
讲道理,Go 语言并没有 enum 关键字,有用过 Protobuf 等的小伙伴知道,Go 语言只是 ”有限的枚举“ 支持,我们也会用常量来定义,枚举值也需要有字面意思的映射。

Go 凭什么不支持三元运算符?

2021-10-27
阅读 2 分钟
3.8k
大家好,我是煎鱼。这是一个很多其他语言工程师转 Go 语言的时间节点,这就难免不论一番比较。其中一个经典的运算上的就是 “三元运算符”:为什么 Go 语言不支持三元运算符,Go 不支持三元运算符就是设计的不好,是历史在开倒车吗?今天就由煎鱼来和大家一起摸索为什么。三元运算符是什么三元运算符,在典型的数学意义上...

详解 Go 团队不建议用的 unsafe.Pointer

2021-10-25
阅读 3 分钟
3.2k
大家好,我是煎鱼。大家在学习 Go 的时候,肯定都学过 “Go 的指针是不支持指针运算和转换” 这个知识点。为什么呢?首先,Go 是一门静态语言,所有的变量都必须为标量类型。不同的类型不能够进行赋值、计算等跨类型的操作。那么指针也对应着相对的类型,也在 Compile 的静态类型检查的范围内。同时静态语言,也称为强类型...

Go 开发时要了解的 1 个内存模型细节

2021-10-21
阅读 4 分钟
3.2k
在日常工作中,如果我们能够了解 Go 语言内存模型,那会带来非常大的作用。这样在看一些极端情况,又或是变态面试题的时候,就能够明白程序运行表现下的很多根本原因了。

Go SliceHeader 和 StringHeader,你知道吗?

2021-10-20
阅读 4 分钟
7.1k
今天要给大家介绍的是 SliceHeader 和 StringHeader 结构体,了解清楚他到底是什么,又有什么用,并且会在最后给大家介绍 0 拷贝转换的内容。

群里又吵起来了,Go 是传值还是传引用?

2021-10-13
阅读 4 分钟
3.3k
大家好,我是煎鱼。前几天在咱们的 Go 交流群里,有一个小伙伴问了 “xxx 是不是引用类型?” 这个问题,引发了将近 5 小时的讨论:兜兜转转回到了日经的问题,几乎每个月都要有人因此吵一架。就是 Go 语言到底是传值(值传递),还是传引用(引用传递)?Go 官方的定义本部分引用 Go 官方 FAQ 的 “When are function para...

详解 Go 空结构体的 3 种使用场景

2021-10-12
阅读 4 分钟
6.3k
大家好,我是煎鱼。在 Go 语言中,有一个比较特殊的类型,经常会有刚接触 Go 的小伙伴问到,又或是不理解。他就是 Go 里的空结构体(struct)的使用,常常会有看到有人使用: {代码...} 还清一色的使用结构体,也不用其他类型。高度常见,也就不是一个偶发现象了,肯定是背后必然有什么原因。今天煎鱼这篇文章带大家了解...

Go 面试官问我如何实现面向对象?

2021-10-08
阅读 4 分钟
10.7k
大家好,我是煎鱼。在大家初识 Go 语言时,总会拿其他语言的基本特性来类比 Go 语言,说白了就是老知识和新知识产生关联,实现更高的学习效率。最常见的类比,就是 “Go 语言如何实现面向对象?”,进一步展开就是 Go 语言如何实现面向对象特性中的继承。这不仅在学习中才用到类比,在业内的 Go 面试中也有非常多的面试官...

Go 并发读写 sync.map 的强大之处

2021-09-24
阅读 7 分钟
18.1k
在之前的 《为什么 Go map 和 slice 是非线程安全的?》 文章中,我们讨论了 Go 语言的 map 和 slice 非线程安全的问题,基于此引申出了 map 的两种目前在业界使用的最多的并发支持的模式。

为什么 Go map 和 slice 是非线程安全的?

2021-09-22
阅读 5 分钟
14.1k
初入 Go 语言的大门,有不少的小伙伴会快速的 3 天精通 Go,5 天上手项目,14 天上线业务迭代,21 天排查、定位问题,顺带捎个反省报告。

Go 数组比切片好在哪?

2021-09-17
阅读 4 分钟
4.4k
大家好,我是煎鱼。前段时间有播放一条快讯,就是 Go1.17 会正式支持切片(Slice)转换到数据(Array),不再需要用以前那种骚办法了,安全了许多。但是也有同学提出了新的疑惑,在 Go 语言中,数组其实是用的相对较少的,甚至会有同学认为在 Go 里可以把数组给去掉。数组相较切片到底有什么优势,我们又应该在什么场景...

Go 工程师必学:Go 大杀器之跟踪剖析 trace

2021-09-15
阅读 5 分钟
5.2k
‍‍‍‍‍‍‍‍‍前段时间分享了《Go 程序崩了?煎鱼教你用 PProf 工具来救火!》,但有时候单单使用 pprof 还不一定足够完整观查并解决问题,因为在真实的程序中还包含许多的隐藏动作,例如:

上帝视角看 “Go 项目标准布局” 之争

2021-09-13
阅读 3 分钟
4k
前段时间 Go 语言社区有一件事情引爆了热议,那就是 golang-standards/project-layout 项目的 “Go 项目的标准布局” 之争。

Go 程序崩了?煎鱼教你用 PProf 工具来救火!

2021-09-12
阅读 14 分钟
7.3k
这次分享《Go 语言编程之旅》中的性能分析大杀器 PProf,文章字数有 1w3+ 字,我想应该是目前业界比较全的 PProf 文章了,也欢迎大家买本 《Go 语言编程之旅》学习更多的 Go 语言进阶技巧和知识。

用 Go map 要注意这个细节,避免依赖他!

2021-09-12
阅读 5 分钟
5.3k
有的小伙伴没留意过 Go map 输出、遍历顺序,以为它是稳定的有序的,会在业务程序中直接依赖这个结果集顺序,结果栽了个大跟头,吃了线上 BUG。

Go1.17 新特性,优化抛出的错误堆栈

2021-09-01
阅读 2 分钟
4k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。平时在日常工程中,我们常常会用到异常恐慌(panic)的记录和追踪。最常见的就是,线上 panic 了之后,我们总想从中找到一些蛛丝马迹。我们很多人是看 panic 是看他的...

Go1.17 新特性,凭什么让程序提速 5~10%?

2021-09-01
阅读 2 分钟
7.1k
在 Go1.17 发布后,我们惊喜的发现 Go 语言他又又又优化了,编译器改进后产生了约 5% 的性能提升,也没有什么破坏性修改,保证了向前兼容。

Go 面试官:什么是协程,协程和线程的区别和联系?

2021-07-20
阅读 3 分钟
13.4k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。最近金三银四,是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。今天的男主角,是工程师的必修技能,那就是 “什...

一个新细节,Go 1.17 将允许切片转换为数组指针!

2021-07-12
阅读 2 分钟
5.5k
在 Go 语言中,一个切片(slice)包含了对其支持数组的引用,无论这个数组是作为一个独立的变量存在于某个地方,还是仅仅是一个为支持分片而分配的匿名数组。

使用 Go defer 要小心这 2 个折腾人的雷区!

2021-07-09
阅读 5 分钟
2.4k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。在 Go 语言中 defer 是一个非常有意思的关键字特性。例子如下: {代码...} 输出结果是: {代码...} 在前几天我的读者群内有小伙伴讨论起了下面这个问题:简单来讲,问...

生产环境遇到一个 Go 问题,整组人都懵逼了...

2021-07-07
阅读 2 分钟
3.3k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。前段时间正在疯狂写代码的时候,突然有一个读者给我提了一个问题,让我有了一定的兴趣:我还是比较感兴趣的,因为是生产环境、有代码,且整组人都懵逼的问题。在征求...

经典面试题:你觉得 Go 在什么时候会抢占 P?

2021-06-24
阅读 5 分钟
4.2k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。前几天我们有聊到《单核 CPU,开两个 Goroutine,其中一个死循环,会怎么样?》的问题,我们在一个细节部分有提到:有新的小伙伴会产生更多的疑问,那就是在 Go 语言...

用 Go struct 不能犯的一个低级错误!

2021-06-17
阅读 4 分钟
4.2k
前段时间我分享了 《手撕 Go 面试官:Go 结构体是否可以比较,为什么?》的文章,把基本 Go struct 的比较依据研究了一番。这不,最近有一位读者,遇到了一个关于 struct 的新问题,不得解。

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

2021-06-16
阅读 6 分钟
11.5k
这段程序的输出结果为 hello world.,就是这么的简单又直接。但这时候又不禁思考了起来,这个 hello world. 是怎么输出来,经历了什么过程。

跟面试官聊 Goroutine 泄露的 6 种方法,真刺激!

2021-06-11
阅读 5 分钟
14.8k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。前几天分享 Go 群友提问的文章时,有读者在朋友圈下提到,希望我能够针对 Goroutine 泄露这块进行讲解,他在面试的时候经常被问到。今天的男主角,就是 Go 语言的著名...

你知道 Go 结构体和结构体指针调用有什么区别吗?

2021-06-06
阅读 2 分钟
14.9k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。前几天在分享《Go 结构体是否可以比较,为什么?》时,有小伙伴提出了新的问题:虽然大家提问题的速度已经超出了本鱼写文章的速度...不过作为宠粉狂鱼,在此刻清明假...

Go 面试官:单核 CPU,开两个 Goroutine,其中一个死循环,会怎么样?

2021-06-04
阅读 3 分钟
5.5k
微信搜索【脑子进煎鱼了】关注这一只爆肝煎鱼。本文 GitHub github.com/eddycjy/blog 已收录,有我的系列文章、资料和开源 Go 图书。大家好,我是煎鱼。最近金三银四,是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。今天的主角,是 Go 面试的万能题 GMP 模型的延伸...