From bdb1443da1486e24ef10df2c2b36f29cf41bafd8 Mon Sep 17 00:00:00 2001 From: wangzheng1 Date: Tue, 30 Apr 2024 11:40:18 +0800 Subject: [PATCH 1/4] =?UTF-8?q?update=20#tip=2034=20=E6=96=87=E5=AD=97?= =?UTF-8?q?=E6=B5=81=E7=95=85=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/034.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/034.md b/src/034.md index 627ef6e..d7b9603 100644 --- a/src/034.md +++ b/src/034.md @@ -7,7 +7,7 @@ 这里是3个设计函数签名时的关键准则: -1. context.Context放在前面 +## 1. context.Context放在前面 在函数签名中,context.Context 应当始终放在首位。 @@ -21,32 +21,32 @@ - 截止期限 - 其他上下文相关的机制 -这种一致性有助于提高代码的**可读性**,并且让代码库变得易于导览。 +这种一致性有助于提高代码的**可读性**,并且让代码库变得易于浏览。 ![](./images/034/1.png) 此外,别把context.Context放到 struct 中。 -context 本质上意味着它注定是短暂的,旨在贯穿与一段程序,而非成为一个对象状态的一部分(这里有一些例外情况,比如,HTTP 的 handler,大家习以为常地从请求中提取 context,这是因为这里 context 早已跟请求的生命周期关联起来了)。 +context 本质上意味着它注定是短暂的,旨在贯穿于一段程序,而非成为对象状态的一部分(这里有一些例外情况,比如,HTTP 的 handler,大家习惯地从请求中提取 context,这是因为 context 早已跟请求的生命周期相关联了)。 -2. Options结构体置于最后 +## 2. Options结构体置于最后 “options结构体”模式是一个灵活而强大的方法,它能让函数在不破坏兼容性的前提下随着时间去演进。 -我曾在推特上探讨过 options 结构体和可变参 options: +我曾在推特上探讨过 options 结构体和可变参 options:[twitter.com/func25/status/...](https://twitter.com/func25/status/1758435261183353308) ![](./images/034/2.png) -参数的顺序可能表征了这个参数的重要性。 +参数的顺序可能表明了这个参数的重要性。 把这个结构体作为一个函数的最后一个参数有两个目的: - 保持一致性(与可变参 options 模式一致) - 表明这些是可选配置项,而非函数操作逻辑的核心部分 -3. 以error(或者bool)结尾 +## 3. 以error(或者bool)结尾 -Go在语义上表征一个操作是成功还是失败是通过它的最后一个返回值来达成的,通常这个最后的返回值是一个error。 +Go习惯通过最后一个返回值(通常是一个error)来表明一个操作是成功还是失败。 某些情况中,如果布尔值更加妥当,比如说存在性检查,那么它也是放到最后的。 @@ -54,4 +54,4 @@ Go在语义上表征一个操作是成功还是失败是通过它的最后一个 ![](./images/034/3.png) -在譬如 TryFetchData 的场景中,bool 被用来表征存在性,特别是即便不存在也不被当做是一个错误的情况下。 \ No newline at end of file +在譬如 TryFetchData 的场景中,bool 被用来表明存在性,特别是即便不存在也不会被当做是一个错误。 \ No newline at end of file From 63627fe7949e1828e04134c4c6355cc5d5d0c4ff Mon Sep 17 00:00:00 2001 From: wangzheng1 Date: Tue, 30 Apr 2024 11:55:39 +0800 Subject: [PATCH 2/4] update #tip 38 format Err --- src/038.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/038.md b/src/038.md index 83b6fb0..b783218 100644 --- a/src/038.md +++ b/src/038.md @@ -12,7 +12,7 @@ 这会使调试错误和处理错误变得更加困难。 -**使用 `fmt.Errorf` 和 `%w` ** +**使用 `fmt.Errorf` 和 `%w`** Go 1.13 版本引入了一种在保留原始错误的同时为其添加更多信息的方法,这就是通过 `fmt.Errorf` 函数配合 `%w` 符号来实现。 From e0cdfabb095c3ed4e818f76f524ef437b89da962 Mon Sep 17 00:00:00 2001 From: wangzheng1 Date: Tue, 30 Apr 2024 15:55:09 +0800 Subject: [PATCH 3/4] =?UTF-8?q?update=20#tip=2041=20=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/041.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/041.md b/src/041.md index e5b0593..8a9c76d 100644 --- a/src/041.md +++ b/src/041.md @@ -17,7 +17,7 @@ - **对齐**:数据类型根据其大小具有特定的对齐要求。 -例如,一个 int32 类型可能需要在 4 字节边界上对齐,这意味着它的启始内存地址应该是 4 的倍数。 +例如,一个 int32 类型可能需要在 4 字节边界上对齐,这意味着它的起始内存地址应该是 4 的倍数。 - **填充**:为了满足对齐要求,编译器可能会在结构体字段之间插入未使用的空间(填充)。 From c33e1353a87488d04f266fa6376f894d88c43bf4 Mon Sep 17 00:00:00 2001 From: wangzheng1 Date: Tue, 30 Apr 2024 15:59:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?update=20#tip=2044=20=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/044.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/044.md b/src/044.md index 408f9db..563d203 100644 --- a/src/044.md +++ b/src/044.md @@ -1,6 +1,6 @@ # Tip #44 有意地使用Must函数来停止程序 -> 原始链接:[Intentionally Stop with Must Functions](https://twitter.com/func25/status/1766442686624784496) +> 原始链接:[Golang Tip #44: Intentionally Stop with Must Functions](https://twitter.com/func25/status/1766442686624784496) > 这是一个乍一看有点儿反直觉的技巧,就是使用“Must”函数有意地允许程序停止。