Google 大佬们为什么要开发 Go 这门新语言?

2022-01-17
阅读 2 分钟
2.7k
大家好,我是煎鱼。大家平时都是在用 Go 语言,那以往已经有了 C、C++、Java、PHP。Google 的大佬们为什么还要再开发一门新的语言呢?难不成是造轮子,其他语言不香吗?背景Go 编程语言构思于 2007 年底,构思的目的是:为了解决在 Google 开发软件基础设施时遇到的一些问题。图上三位是 Go 语言最初的设计者,功力都非...

为什么 Go 有两种声明变量的方式,有什么区别,哪种好?

2022-01-12
阅读 3 分钟
3.1k
有一个读者刚入门 Go ,提了一个很有意思的问题:Go 有几种种声明变量的方式,作为初学者,到底用哪种,有什么区别,又为什么要有多种声明方式呢?

Go 为什么不在语言层面支持 map 并发?

2022-01-10
阅读 2 分钟
2.7k
大家好,我是煎鱼。很多小伙伴学习 Go 语言的语法时,可能只是轻轻地看到过这个问题,结果一旦上手,多多少少一个组内总会碰到过几次。甚至会发现有一定年限的程序员也会遇到。有小伙伴疑惑了,这么折腾,为什么 Go 不直接在语言层面就支持 map 并发,那得有多香?为什么原生不支持凭什么 Go 官方还不支持,难不成太复杂...

Go 泛型的这 3 个核心设计,你都知道吗?

2022-01-05
阅读 5 分钟
4k
大家好,我是煎鱼。Go1.18 的泛型是闹得沸沸扬扬,虽然之前写过很多篇针对泛型的一些设计和思考。但因为泛型的提案之前一直还没定型,所以就没有写完整介绍。如今已经基本成型,就由煎鱼带大家一起摸透 Go 泛型。本文内容主要涉及泛型的 3 大概念,非常值得大家深入了解。如下:类型参数。类型约束。类型推导。类型参数...

为什么 Go 里值为 nil 可以调用函数?

2021-12-27
阅读 2 分钟
3.3k
大家好,我是煎鱼。最近在我们 Go 的技术交流群里,有一个小伙伴提了一个程序方面的问题,还挺有意思的,分享给大家。示例示例程序如下: {代码...} 这段程序的运行结果是什么?从程序的分析来看,变量 t 并没有初始化,只是声明了类型。然后就直接调用了 Hello 方法,像是 nil 调用函数,理论上应该出现恐慌(panic)。...

背事故?分享 6 种常见的 Go 致命错误场景

2021-12-24
阅读 3 分钟
4.3k
大家好,我是煎鱼。有一次事故现场,在紧急恢复后,他正在排查代码,查了好一会。我回头一看,这错误提醒很明显就是致命错误,较好定位。但此时,他竟然在查 panic-recover 是不是哪里漏了,我表示大受震惊...今天就由煎鱼给大家分享一下错误类型有哪几种,又在什么场景下会触发。错误类型error第一种是 Go 中最标准的 e...

Go 新关键字 any,interface{} 会成为历史吗?

2021-12-23
阅读 2 分钟
12.8k
大家好,我是煎鱼。大家在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any。例子如下: {代码...} 之前没有专门提过,但有没有小伙伴以为这个关键字,是泛型代码专属的?其实不是...在这次新的 Go1.18 更新中,any 是作为一个新的关键字出现,any 有一个真身,本质上是 interface{} 的别名: {代码...} ...

长达 12 年,Go 泛型才引入,是政治,还是技术问题?

2021-12-21
阅读 2 分钟
3.1k
大家好,我是煎鱼。前两天 Go1.18 beta1 已经发布,距离正式发布 Go1.18 的生产可用还有 2 个月,也就是泛型即将正式面世。最近正在收集泛型的一些资料,看到在 2015 年有人在 Hacker News 上的《Go 1.5 max procs default》吐槽 Go 不支持泛型是 “政治” 原因...看了还是有些意义的,与现在的矛盾点基本一致,为此分享给...

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

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

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

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

Proto 代码到底放哪里?

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

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

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

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

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

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

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

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

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

Go SliceHeader 和 StringHeader,你知道吗?

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

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

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

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

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

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

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

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

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

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

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

Go 数组比切片好在哪?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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