10 年了!Go 常量为什么只支持基本数据类型?

2023-09-13
阅读 3 分钟
1.5k
大家好,我是煎鱼。相信大家在接触 Go 这门编程语言时,就会学到常量这个知识点。各大编程语言会教你,常量是不可变变量的一种类型。只要定义了常量,你就可以安心的用他。不用担心值在哪里就被程序莫名奇妙的给改了。常量的使用例子如下例子: {代码...} 输出结果: {代码...} 你可能会发现一个奇怪的点。那就是例子里...

Go 将增加内置的零值标识符 zero!

2023-08-17
阅读 4 分钟
865
大家学习和使用 Go 语言时,有一个神奇的概念:零值(zero-values)。零值这个名字是具体谁起的,又是从哪里先开始喊起的,已经难以考究了。

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

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

Go 改版本号规则,终于在主版本支持第三位数字 0 了。。。

2023-08-02
阅读 3 分钟
477
大家好,我是煎鱼。平时我们经常会跟踪 Go 的版本发布,看看是不是有 BUG,新特性等值得关注的东西,好吸取新的知识和技术跟进,用到自己的日常工作和系统中。在新的特性、新的资料记录的映射上,我们也会用版本号来与之关联,这很常见。背景但看 Go 版本号时,会出现一个和其他软件版本不一样的神奇现象。那就是 Go 的...

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.21 速览:Context 可以设置取消原因和回调函数了,等的可太久了!

2023-06-29
阅读 4 分钟
1k
大家好,我是煎鱼。在 Go 中有一个很经典的设计:context,这是许多同学初学时必学的标准库。涉及到上下文传递、超时控制等必要项。甚至在函数体中的第一个参数大多是传 context。写第三方库也必须兼容 context 设置,否则会经常有人提需求让你支持。Context Demo以下是一个快速 Demo: {代码...} 运行结果: {代码...} ...

Go1.21 速览:支持自定义 go.env 文件,可惜还是有所残缺。。。

2023-06-16
阅读 2 分钟
988
像以前最早时,有的同学是打开 ~/.zshrc,一番 vim 操作,设置好 export GO111MODULE=on。最后再 source 一下。虽然简单,其实也是有好几个步骤的:

Go1.21 速览:新内置函数 clear、min、max 和新标准库包 cmp!

2023-06-07
阅读 4 分钟
1.1k
前面给大家分享了 Go1.21 正式不支持 macOS 10.13 和 10.14 的支持。吓得我赶紧把我的 2017 款的老爷机从 10.14 升成 13.4。感觉 mbp 已经变成了暖宝宝。😅

Go1.21 速览:骚操作 panic(nil) 将成为历史!以后别这么干了。。。

2023-06-02
阅读 3 分钟
1.3k
大家好,我是煎鱼。在 Go 语言中,返回错误、抛出异常一直是大家比较关注的话题。在抛出异常上,我们一般都是这么用的: {代码...} 运行结果: {代码...} 这看起来一切正常,没什么问题的样子。隐晦的雷其实在现在的 Go 版本有一个较隐晦的雷。看看 panic 和 recover 对应的参数和返回类型。如下: {代码...} 参数值类型...

Go1.21 速览:正式结束对 macOS 10.13 和 10.14 的支持

2023-05-29
阅读 2 分钟
1.1k
根据 Go 语言的版本发布规律,一般是 2 月份和 8 月份各会发布一个新的版本。当前是 Go1.20。也就是在 8 月份会发布 Go1.21 这一个新版本。

Go1.20.4 新版本发布,修复了一个神奇的内联 BUG!

2023-05-09
阅读 2 分钟
1.6k
大家好,我是煎鱼。最近 Go 在劳动节期间,Go 发布了小版本的版本更新,主要是 Go1.20.4 和 Go1.19.9:周末我在看 Go1.20.4 的发布里程碑记录时,发现了一个比较有意思的 BUG,持续了很久,一直没人发现。直至今日才被修复。我们快速来看一下。演示代码如下: {代码...} 请问运行的结果是什么?我掐指一算,是如下结果:...

Go1.21 速览:过了一年半,slices、maps 泛型库终于要加入标准库。。。

2023-05-05
阅读 5 分钟
1.7k
大家好,我是煎鱼。在 2022 年 3 月,Go1.18 终于发布。在该版本中,包含了 Go1.17 起就已存在的泛型,并于此版本正式发布泛型特性。这是一个备受关注和争议的新特性。在 reddit 甚至有网友放出了这张图:泛型库终于合进 master曾经在 Go1.18 时,Go 语言之父 @Rob Pike 冒了个泡,掌了舵,让不要这么急把泛型重写进标准...

快速上手 Go CGO,掌握在 Go 里写 C!

2023-04-26
阅读 3 分钟
5.1k
大家好,我是煎鱼。最近因为各种奇怪的原因,接触到了 Go 特色之一 CGO。这方面的相关内容也相对少一些,给大家抛砖引玉。毕竟很多跨语言调用,还是会依赖 CGO 这个特性。希望大家在真正要用时有个前置知识垫肚子。CGO 是什么CGO 就是 C 和 Go,两个编程语言。指的是能够创建调用 C 代码的 Go 包。对照着 Go 代码中的 “C...

Go 的一些有趣数据:中国最多人用、开发者年轻;PHP 明显下滑的趋势

2023-04-19
阅读 2 分钟
2.7k
最近看到 JetBrains 家的《 2021~2022 开发者生态系统现状》,Go 有些数据还挺有趣的,分享给大家。这样可以对整体的开发者生态有一定的了解。

一分钟搞明白!快速掌握 Go WebAssembly

2023-03-27
阅读 4 分钟
5.8k
最近因为各种奇怪的原因,更多的接触到了 WebAssembly。虽然之前很多博客也翻过写过各种文章,但总感觉欠些味道。于是今天梳理了一版,和大家一起展开学习。

Go 错误处理:100+ 提案全部被拒绝,为何现阶段仍用 if err != nil?

2023-03-21
阅读 2 分钟
2.5k
在 2018 年 8 月,现任 Go 核心团队负责人 Russ Cox 给 Go2 的错误处理画了一个大大的蓝图,并介绍了一个未实现的设计草案。

Go 遥测将可选加入!Google 收集数据的黑历史对 Go 有负面影响。。。

2023-03-14
阅读 2 分钟
2.4k
大家好,我是煎鱼。之前我写过一篇《Go 工具链想主动上报使用数据,你愿意吗?》文章分享。核心描述的是以下这件事。Go 核心团队负责人 Russ Cox(下称 rsc)想要抽样采集用户的使用数据、性能信息等,便于 Go 团队更好的开发和调研。文章的投票结果:Go 遥测开还是不开近日 Go 团队已经在《Opting In to Transparent Te...

Go 为什么不像 Rust 用 ?!做错误处理?

2023-03-10
阅读 2 分钟
2.5k
大家好,我是煎鱼。之前每次写 Go 错误处理的相关提案时,大家都会在评论区探讨到一个事。Go 这活不得劲,常被戏称,一个大型 Go 工程项目里 60% 的代码都是 if err != nil。咱们错误处理怎么不借鉴一下 Rust,高低也整个问号的语法特性,就可以简化这三行了,不香吗?借鉴 Rust 用 ?!| 符号核心的点是在现有的 Go 例...

Go1.20 arena 能手动管理内存了,怎么用?

2023-02-22
阅读 3 分钟
2.6k
最近 Go1.20 中的手动管理内存受到了很多人的关注。众所周知,Go 是一门带垃圾回收(GC)的编程语言,可以进行自动的内存申请、释放等内存操作。

前有 45 亿数据被扒,现有 Go 工具链想要我的使用数据。。。

2023-02-13
阅读 2 分钟
2.1k
前两天有读者提醒我关注 Go 大当家 Russ Cox 发起的 Go 工具链中的遥测 telemetry in the Go toolchain 讨论。不看不知道,一看下一跳。

向 Rust 学习?Go 将考虑简单字符串插值特性

2023-02-09
阅读 3 分钟
5.6k
大家好,我是煎鱼。在日常开发 Go 工程中,我们经常会用 fmt.Printf 或 fmt.Sprintf 去写类似的拼装字符串的业务。如下代码: {代码...} 这业务迭代迭代着,日积月累的,有一部分常变的拼装逻辑会来越长。小小的电脑显示屏已经不足以让代码在一行内显示了。有许多特性会把字符串转为变量,但后面那串又臭又长的变量依然...

Go1.20 那些事:PGO、编译速度、错误处理等新特性,你知道多少?

2023-02-06
阅读 5 分钟
2.4k
最近 Go1.20 在 2 月 1 号已经正式发布,来的挺早的,以往都是拖到月底的,我翻了好几篇,发现最后还是做了不少功能取舍,放了些新特性(例如:arena 等)的鸽子!

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

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

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

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

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

2022-12-12
阅读 2 分钟
4.5k
大家好,我是煎鱼。相信关注我的许多同学都有接触 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.6k
最近因为临近新版本发布节点,我在看 Go1.20 的新特性《spec: disallow anonymous interface cycles》,发现了一个比较骚的操作...以前我都没想到可以这么用,还有点意思,分享给大家。

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

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

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

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

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

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