还能这样玩?Go 将会增强 Go1 向前兼容性

2023-01-30
阅读 2 分钟
2k
大家好,我是煎鱼。年前我们在《醒醒吧,未来不会有 Go2 了!》文章中讨论了 Go2 的未来,明确了未来是以 Go1.x.y 为主的 Go1 时代。为了实现这个北极星目标,Go 团队采取的策略分别是:增强 Go1 向后兼容(在前文已分享)和 Go1 向前兼容(本文重点内容)。本次要提到的 “向前兼容”,指的是旧版本的 Go 编译新的 Go 代...

醒醒吧,未来不会有 Go2 了!

2023-01-16
阅读 2 分钟
2.3k
本周末在学习的时候,看到 Go 团队大当家 Russ Cox(下称:rsc)在近期分享的《GopherCon 2022: Russ Cox - Compatibility: How Go Programs Keep Working》,讲的是 Go 在兼容性方面的现有问题和思考,还埋了个新预期。

加大力度!Go 将会增强 Go1 向后兼容性

2023-01-10
阅读 3 分钟
2.6k
大家好,我是煎鱼。前段时间我们在写 Go1.20 新特性和变更时,发现了一个问题有悖论。Go1 有兼容性承诺,但如果发现了 BUG,会破坏兼容性。那怎么办?是大胆修改,破坏掉,还是说设计如此,打死不改?写了个开头结果阳了,现在阳半康回来更。Go1 兼容性保障在 Go1 引入了 Go 兼容性保障《Go 1 and the Future of Go Prog...

Go1.20 将会修改全局变量的初始化顺序。梅开二度,继续打破 Go1 兼容性承诺!

2022-12-15
阅读 3 分钟
3.8k
大家好,我是煎鱼。Go1.20 发布在即,大家都关注了一些大头的功能特性,例如:PGO、Arean 等。都没有那么的常接触到。实质上本次新版本还修复了在全局变量初始化方面的顺序,来自《cmd/compile: global variable initialization done in unexpected order》,这是个挺有趣的问题。神奇案例从案例展开,假设在同一个 pack...

多个著名 Go 开源项目被放弃,做大开源不能用爱发电,更不能只靠自己!

2022-12-12
阅读 2 分钟
4.9k
大家好,我是煎鱼。相信关注我的许多同学都有接触 Go 语言的开发,甚至在企业中多有实践。那么你在日常开发中,势必会接触到 gorilla 组织下的各个 Go 开源项目。如下图:gorilla/mux:Star:17.9k。a powerful request router for web applications。gorilla/websocket:Star:18.6k。a standards-compliant and widely...

Go1.20 将禁止匿名接口循环导入!这是一次打破 Go1 兼容性承诺的真实案例。。。

2022-12-09
阅读 3 分钟
3.8k
最近因为临近新版本发布节点,我在看 Go1.20 的新特性《spec: disallow anonymous interface cycles》,发现了一个比较骚的操作...以前我都没想到可以这么用,还有点意思,分享给大家。

Go1.20 继续小修小补 errors 库。。。

2022-12-05
阅读 4 分钟
3.3k
Go 的错误处理机制一直是无数人提了又争,被拒了又提的地方。最近 Go1.20 即将发布,针对 errors 标准库,有一个新的小修小补优化(wrapping multiple errors)。

Go 凭什么搞特殊?不用 yyyy-mm-dd,非得要 2006-01-02 15:04:05。。。

2022-11-28
阅读 2 分钟
3.6k
前段时间我写了一篇《Go1.20 中两个关于 Time 的更新,终于不用背 2006-01-02 15:04:05 了!》,文中有提到 Go 的参考时间格式是:2006-01-02 15:04:05,并解释这么设计的缘由。

PGO 是啥,咋就让 Go 更快更猛了?

2022-11-22
阅读 4 分钟
4.5k
大家好,我是煎鱼。Go1.20 即将发布,近期很多大佬提到一个关键词 PGO,说是有很大的提高,很猛...让我一愣一愣,不禁思考是什么?今天就由煎鱼和大家一起学习。快速了解PGO 是什么Profile-guided optimization (PGO),翻译过来是使用配置文件引导的优化。也被称为:profile-directed feedback(PDF)feedback-directed ...

Go1.20 中两个关于 Time 的更新,终于不用背 2006-01-02 15:04:05 了!

2022-11-17
阅读 3 分钟
3.9k
Go 语言中有一个东西是比较有特色的,那就是 time 标准库,在各类与时间有关的场景都会常常用到,例如:定时/延迟任务、数据更新、时间比较。

打脸了兄弟们,Go1.20 arena 来了!

2022-11-15
阅读 2 分钟
4.5k
大家好,我是煎鱼。大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。当时我们还想着 Go 团队应该不会接纳,至少不会那么快:懒得翻也可以看我再次道来,本文提到的提案《proposal: arena: new package providing memory arenas》,这其中的 Arena 将会是...

Go 十年了,终于想起要统一 log 库了!

2022-11-08
阅读 4 分钟
4.6k
本文参与了思否技术征文,欢迎正在阅读的你也加入。大家好,我是煎鱼。在日常工作中,打日志是很常见的动作。毕竟不打日志,从内部来讲,一旦出问题,定位、排查都会变的非常困难。谁也不想大半夜在那靠猜解决问题。在其他方面,对日志的存储的内容、时长、安全均有不同程度的合规要求,应对客户诉求和提单上门的事件。...

Go for 循环有时候真的很坑。。。

2022-11-02
阅读 2 分钟
4.4k
大家好,我是煎鱼。不知道有多少 Go 的面试题和泄露,都和 for 循环有关。今天我在周末认真一看,发现了 redefining for loop variable semantics 。著名的硬核大佬 Russ Cox 表示他一直在研究这个问题,并表示十年的经验表明了当前语义的代价是很大的。问题案例一:取地址符在 Go 语言中,我们写 for 语句时有时会出现...

Go 大佬良心发现,愿意给 map 加清除了?

2022-10-28
阅读 2 分钟
7.9k
一个东西来来回回的讨论,关了又开,关了后建新的,新的被 ban 了,又发现新的论据,再打开新的。这在职场工作中很常见,在 Go 的提案讨论中,也出现了。

Go try 新提案靠谱吗?想简化错误处理了

2022-10-24
阅读 4 分钟
4.7k
大家好,我是煎鱼。在近日新的 try 提案《proposal: Go 2: error handling: try statement with handler》在社区引发了热议。今天煎鱼和大家一起打开来看看,这能把 Go 错误处理机制给掀开重整不。背景来自 PingCAP 的提案作者 @Greg Weber 会干这事基于两个因素,一个是在《Go Developer Survey 2022 Q2 Results》中明...

用 Go interface{} 等于什么也没说

2022-10-20
阅读 2 分钟
5.1k
Go 谚语中认可的是:"interface{} says nothing",也就是 interface{} 什么也没说。这指的又什么,太黑话了吧...

Go 为什么能火?归功于这 5 个方面

2022-09-28
阅读 3 分钟
10.5k
在国外的播客节目 Go Time #100 中,Rob Pike 和 Robert Griesemer(Go 的两位创始人)和主持人 Jerod Santo 讨论了 Go 语言的成功缘由和一些思考。

Go 代码风格没人喜欢?不对,Gofmt 是所有人的最爱...

2022-09-20
阅读 2 分钟
8k
大家好,我是煎鱼。在任何语言进行编程开发时,只要涉及到多人协作。就一定会遇到一个旷世斗争的大问题。那就是:编码风格。Go 的,PHP 的,Java 的,C++ 的;初级、中级、高级、管理的风格;传统的、互联网的又都不一样。谁的风格更好例如经典的判断场景:if err != nil ,至少可以写出三种模式。如下代码: {代码...} ...

对 Go2 错误处理提案的批判

2022-09-06
阅读 4 分钟
7.9k
一年半前分享了《先睹为快,Go2 Error 的挣扎之路》的文章,内容涉及 Go1 错误处理的问题、Go1.13 的加强、Go2 的新错误处理提案的详解。有多少小伙伴还记得 Go2 的新错误提案的 “美好” 未来?

Go 的零值有什么用?看看这 4 个场景

2022-09-04
阅读 3 分钟
7.2k
前文给大家分享了《10+ 条 Go 官方谚语,你知道几条?》,今天进一步讲讲第 5 条谚语 Make the zero value useful(让零值变得有用),看看里面想的是什么意思。

在 Go 里用 CGO?这 7 个问题你要关注!

2022-09-04
阅读 3 分钟
8k
大家好,我是煎鱼。今天给大家分享的是 Go 谚语中的 Cgo is not Go,原文章同名,略有修改,作者是 @Dave Cheney。以下的 “我” 均指代原作者。借用 JWZ 的一句话:有些人在面对一个问题时,认为 "我知道,我会使用 cgo(来解决)"。在使用 cgo 后,他们就会遇到两个新问题。Cgo 是什么Cgo 是一项了不起的技术,它允许 Go...

Go 只会 if err != nil?这是不对的,分享这些优雅的处理姿势给你!

2022-08-11
阅读 8 分钟
9.5k
大家好,我是煎鱼。上一篇我在《如何对错误进行编程?》给大家分享了 Go 创始人对 Go 谚语之一 Errors are values 的诠释。本篇仍然是错误专场,是 Go 谚语中的 Don't just check errors, handle them gracefully,原文章同名,作者是 @Dave Cheney。以下的 “我” 均指代原作者。这条谚语和 Errors are value 关联性很强...

if err != nil 太烦?Go 创始人教你如何对错误进行编程!

2022-08-01
阅读 4 分钟
9.6k
前段时间我分享了一篇文章《10+ 条 Go 官方谚语,你知道几条?》,引发了许多小伙伴的讨论。其中有一条 “Errors are values”,大家在是 “错误是值” 还是 “错误就是价值” 中反复横跳,纠结不易。

Go 程序太大了,能要个延迟初始化不?

2022-07-27
阅读 3 分钟
7.3k
大家好,我是煎鱼。在公司的不断发展中,一开始大多是大单体,改造慢了,一个仓库会有使用几十年的情况,仓库的规模基本是不断增大的过程。影响之一就是会应用程序打包后的体积越来越大,不知道被用哪里去了...今天要探讨的提案《proposal: language: lazy init imports to possibly import without side effects》,就...

Go 常量只支持基本数据类型?为什么?社区撕了 9 年了...

2022-07-20
阅读 2 分钟
7.5k
大家好,我是煎鱼。今天给大家分享的一个提案,已经在 Go 社区讨论了整整 9 年(2013~2022),它与我们的日常编程密切相关。今天就由煎鱼和大家一起深入学习和了解提案《proposal: spec: allow constants of arbitrary data structure type》吧,看看有没有什么新的想法。背景我们先看看以下示例代码,如下: {代码...} ...

脉脉网友出的一道简单 Go 面试题,你能答对吗?

2022-07-19
阅读 1 分钟
7.2k
大家好,我是煎鱼。前段时间脉脉在搞一个 “我来出一道面试题” 的讨论系列,其中一位脉友 @在宿雾参观的小冬瓜 出了一道 Go 题目。来和煎鱼一起回答自己答的准不准,知识掌握的怎么样吧。(大家都说很简单,结果在投票上 50 50,错的人更多...)题目Go 题目如下: {代码...} 请选择程序的运行结果(答案)是什么?A:1;B...

这个新 Go 错误处理提案,能解决问题不?

2022-07-13
阅读 3 分钟
6.9k
大家好,我是煎鱼。Go 语言的一大特色就是它的错误机制,因此基本上所有的错误处理提案或讨论我都会有所查看和学习,开拓不同的思考视野和解决方法。今天分享的是 @Cristo García 所提出的提案《Simple Error Handling for Go 2》,略有修改,和煎鱼一起学习和讨论吧!Go 必须仍然是 Go这一个提案的核心观点是 Go 必须仍...

优化 Go 错误处理,魔改 Go recover 靠谱吗?

2022-07-08
阅读 3 分钟
6.8k
Go 的错误处理一直是表现最突出的一块地方,许许多多的同学都提出了各种提案,例如:引入 try-catch、用 panic 代替 if err != nil、引入新的关键字等。但这些都被一一驳回了。

Go1.19 那些事:国产芯片、内存模型等新特性,你知道多少?

2022-07-01
阅读 4 分钟
7.7k
Go 的内存模型已被修订,以使 Go 与 C、C++、Java、JavaScript、Rust 和 Swift 使用的内存模型保持一致。Go 只提供顺序一致的原子学,而不是其他语言中的任何更宽松的形式。

Go 为什么不支持前缀自增运算符?

2022-06-22
阅读 2 分钟
6.1k
大家好,我是煎鱼。习惯性对比,类比学习,是大家掌握新技能时会习惯性的关联操作。像 Go 这种比较有味道的编程语言,其有一个细节也是大家很好奇的。其实 Go 只支持后自增/自减,今天煎鱼和大家一起研究为什么。语法基本的 Go 自增,非常简单。直接见代码: {代码...} 输出结果: {代码...} 如果回答输出结果错了,建议...