Go 内联优化能让程序快多少?

2022-06-20
阅读 4 分钟
6.2k
最近周末在家学习时看到 @Dave Cheney 的《Inlining optimisations in Go》还是有不少养分的,翻译分享给大家,有所修整、删减。

惊了!goto 语句让 Go 代码变成意大利面条吗?

2022-06-14
阅读 3 分钟
9.6k
大家好,我是煎鱼。Goto 语句在社区的讨论中经常被人诟病,认为其破坏了结构化编程和程序的抽象,是有害的,可怕的。最早的观点来源于 1968 年,Edsger Dijkstra 写了一封信《Go To Statement Considered Harmful》,来表达其是有害的观念。如下图:不过,但是,其实...Go 支持了 goto 语句,很多人不理解,大喊 less is...

Go 想要加个箭头语法,这下更像 PHP 了!

2022-06-08
阅读 3 分钟
6k
新的 Go 提案目的是添加轻量级的匿名函数语法,业内别名又叫 “箭头语法”,是由 @Damien Neil 所提出的,提案的来源是《proposal: Go 2: Lightweight anonymous function syntax》,褒贬都有:

Go 为什么要设计 iota 常量?

2022-06-02
阅读 2 分钟
6.4k
Go 语言中有一个非常有特色的东西,那就是 iota 常量。经过某鱼的不完全统计,许多 Go 开发者都是由 PHP、Java、C++、Python 等转型过来,对此还是挺好奇的。

Go 错误处理新思路?用左侧函数和表达式

2022-05-27
阅读 3 分钟
5.5k
错误处理一直是 Go 一个很有争议的地方,大家在该类提案上贡献了各种各样的想法。在五一假期期间,我也发现了一个有趣的技术提案,那就是:左侧函数;还有 Go+ 的新思路。

骚爆了... Go 错误处理中再套个娃,能解决烦恼不?

2022-05-24
阅读 3 分钟
5.2k
大家好,我是煎鱼。在 Go 的编程中,错误处理机制的处理永远是大家在讨论。不过 Go1 没法大动干戈了,那就想办法继续优化吧。今天煎鱼给大家介绍一个五一假期期间学习时看到的一个新提案。背景在现阶段,我们在标准库中能够包装错误的唯一方法是使用 fmt.Errorf,可以操作的空间是比较小的。这意味着我们对错误所能做的...

被折磨了 13 年,Go 怎么解决再赋值的坑?

2022-05-19
阅读 2 分钟
4.3k
大家好,我是煎鱼。最近在看 Go 的一些历史提案时,发现有个别很神奇的提案,已经提出来了许多年,但在如今依然没有关闭,并且不断地有人在讨论,但又解决不了。有种 “很气又干不掉我的样子”,今天就由煎鱼带大家一起来看看是什么。背景今天本文介绍的 Go 提案《proposal: spec: various changes to :=》是经典中的经典...

你会犯这些 Go 编码错误吗(二)?

2022-05-18
阅读 3 分钟
3.6k
大家好,我是煎鱼。前一次给大家分享了《你会犯这些 Go 编码错误吗(一)?》,不知道大家吸收的怎么样,还有再踩到类似的坑吗?今天继续来第二弹,跟煎鱼上车。Go 常见错误6. 同名变量的作用域问题我们在编写程序时,由于各种临时变量,会常用变量名 n、i、err 等。有时候会遇到一些问题,如下代码: {代码...} 程序的...

10+ 条 Go 官方谚语,你知道几条?

2022-05-15
阅读 2 分钟
2.8k
作为一个 Go 语言开发工程师,总是在入门、深入、撕提案时能够听到各种带有 Go 特色的话语,例如:少即是多(less is more),非常有趣。

这些常见的 Go 编码错误,你犯过吗(一)?

2022-05-15
阅读 4 分钟
2.9k
大家好,我是煎鱼。在用 Go 编程时,总会遇到各种奇奇怪怪的错误,国内外已经有许多小伙伴总结过(参考链接见参考),感觉都能凑一桌了。之前一直想写,想着五一假期肝一肝。今天给大家分享 Go 里常见的编码错误(一),希望对大家有所帮助。Go 常见错误1. nil Map问题在程序中声明(定义)了一个 map,然后直接写入数据...

为什么 Go 用起来会难受?这 6 个细节你知道吗

2022-05-09
阅读 3 分钟
3.6k
大家好,我是煎鱼。在做新的应用选型时,我们会进行应用编程语言的选择,这时会纠结 Java、PHP、Go...各种,会思考有没有致命的问题,不能用?可以明确的是,Go 没有非常致命的问题,否则你我他都不会在这里相遇,也不会大火。难受的点,倒是有不少,今天就由煎鱼和大家一起来看看。难受的点泛型在 Go1.18 以前,在所有...

Go 读者提问:Go 函数返回值命名有存在的意义吗?

2022-03-22
阅读 2 分钟
2.3k
大家好,我是煎鱼。在前两周我们在这篇《你能答对这道 Go 题目吗?超过 80% 的人都答错了...》文章中,针对题目,有小伙伴提出了如下问题:为此,今天我们就来了解一下 Go 函数的返回值命名的意义是什么?案例函数 a 带返回值,函数 b 是不带返回值命名的例子。如下: {代码...} 这是日常工作中最常见的,前两年年我听到...

Go 设计哲学:少即是多,哪里来的?

2022-03-10
阅读 6 分钟
7.3k
甚至讨论 Go issues 和提案时,都会有人用 “less is more” 来反驳或做为论点支撑,非常的有意思。大家都会很好奇,出处是哪里,是什么意思?

网友:Go 你是 Google 的,Go:我不是

2022-02-23
阅读 4 分钟
2.9k
大家好,我是煎鱼。我有一个朋友,近几年听说各种博弈、各种国内云产品等发力,各企业的 “国产化” 被提到了台面上,明确要去做这类事情。作为当代编程语言风口的 Go 语言,在宣传时,常常会说是 Google 背书:那么问题来了!假设出了一些冲突,Go 语言是否会被 Google 完全控制,形成垄断呢?今天煎鱼就和大家一起来了解...

Go1.18 新特性:高效复制,strings, bytes 标准库新增 Clone API

2022-02-21
阅读 2 分钟
4.3k
Go1.18 过几周(3月份)就要发布了,先前我们已经更新了好几期新版本特性,今天给大家带来一个新的优化类的内容,是与 strings 和 bytes 标准库有关。

Go1.18 新特性:弃用 strings.Title 方法,换个新坑吧!

2022-02-16
阅读 3 分钟
6.9k
最近在看 Go1.18 Release Notes 时,发现 strings, bytes 标准库的 Title 方法,竟然被弃用了(Deprecated),这是为什么呢?

Go1.18 新特性:三顾茅庐,被折腾 N 次的 TryLock

2022-02-15
阅读 3 分钟
3.2k
大家好,我是煎鱼。还记得我之前写过一篇《Go 为什么不支持可重入锁?》的文章,主要是介绍有其他语言经验的小伙伴,想要 Go 支持可重入锁,被残忍拒绝的历程。大佬总会有拗不过的时候,虽然不是可重入锁。但在 Go1.18 实现了尝试获取锁(TryLock)的新方法,也有点那味道了。今天煎鱼带大家学习被折腾了 3 回的 “他”。...

Go1.18 新特性:引入新的 netip 网络库

2022-02-15
阅读 3 分钟
4.9k
写这篇文章时是大年初一,原本想说这个月就要发布 Go1.18 了。但是,好家伙,Go1.18 beta2 发布了,官方告知社区 Go1.18 要拖更到 3 月份了,咕咕咕...

Go 泛型变更:约束太丑了,先移动到 x/exp 做实验性功能

2022-02-07
阅读 2 分钟
3.6k
大家好,我是煎鱼。Go 泛型配套了各种标准库,像是常见的 maps、slices 泛型库。早期他们是长这样的: {代码...} 又或是: {代码...} 关注到里面的标准库 constraints,他就是今天变更的主角。他咋了呢?背景标准库 constraints 是个新鲜事物,由泛型扛把子 Ian Lance Taylor 在 2021 年 9 月 24 日提交《constraints: n...

Go1.18 新特性:新增好用的 Cut 方法

2022-01-26
阅读 2 分钟
2.3k
在各种写业务代码的时候,大家会常常要处理字符串的内容。常见的像是用邮箱登陆账号,如果是:eddycjy@gmail.com,那就得根据 @ 来切割,分别取出前和后,来识别用户名和邮箱地址。

Go1.18 新特性:多 Module 工作区模式

2022-01-24
阅读 3 分钟
3.9k
Go1.18 将会推出一个新特性:Multi-Module Workspaces,用于支持 Module 多工作区,能解决以往的一系列问题。

Go1.18 新特性:编译后的二进制文件,将包含更多信息

2022-01-24
阅读 2 分钟
2.9k
大家好,我是煎鱼。我有一个朋友,,开开心心入职,想着施展拳脚,第一个任务就是对老旧的二进制文件进行研究。他一看,这文件,不知道是编译器用什么参数怎么打出来的,环境不知道是什么,更不知道来自什么代码分支?这除了是项目流程上的问题外,Go 在这块也有类似的小问题,处理起来比较麻烦。背景日常中很难从 Go 二...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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