又有新功能!Go 将有生成新模板的 gonew 工具链

2023-08-10
阅读 3 分钟
875
不知道大家平时在日常工作中,会不会遇到一个问题?公司用着微服务架构,经常要创建新的服务,需要一个应用模板去初始化新的服务,减少 ctrl+c+v,转为相对自动化。

Go defer 去掉闭包函数,靠谱吗?

2023-07-11
阅读 2 分钟
3.7k
在 Go 语言里,defer 关键字是大家很爱用的。因为他有着 defer+recover+panic 的组合拳打法,还有种各种 defer close 等常用场景。

Go 团队将修改 for 循环变量的语义,Go1.21 新版本即可体验!

2023-07-05
阅读 3 分钟
4.1k
经过 Go1 向前兼容性和向后兼容性提案的铺垫,循环变量的这个问题将得到解决。在 Go1.21 可以进行尝试使用,预计 Go1.22 开始正式变更。

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

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

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

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

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

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

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

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

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

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

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

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

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

2022-08-11
阅读 8 分钟
9k
大家好,我是煎鱼。上一篇我在《如何对错误进行编程?》给大家分享了 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.1k
前段时间我分享了一篇文章《10+ 条 Go 官方谚语,你知道几条?》,引发了许多小伙伴的讨论。其中有一条 “Errors are values”,大家在是 “错误是值” 还是 “错误就是价值” 中反复横跳,纠结不易。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2021-12-21
阅读 2 分钟
3.2k
大家好,我是煎鱼。前两天 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》,讲的就是增加泛型后的参数类型上的类型开...

Go 的 fake-useragent 了解一下

2018-05-21
阅读 4 分钟
12.4k
有的网站会根据 User-Agent 的不同,跳转到不同(PC、M)的站点,也有根据版本的不同给出不一样的提示等等,而 User-Agent 的变化更是爬虫里的基础姿势