Skip to content

Commit

Permalink
Merge pull request #178 from wzlove/master
Browse files Browse the repository at this point in the history
修改Tip34,38,41
  • Loading branch information
smallnest authored Apr 30, 2024
2 parents 6a5a4ab + c33e135 commit 15a0638
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 12 deletions.
18 changes: 9 additions & 9 deletions src/034.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

这里是3个设计函数签名时的关键准则:

1. context.Context放在前面
## 1. context.Context放在前面

在函数签名中,context.Context 应当始终放在首位。

Expand All @@ -21,37 +21,37 @@
- 截止期限
- 其他上下文相关的机制

这种一致性有助于提高代码的**可读性**并且让代码库变得易于导览
这种一致性有助于提高代码的**可读性**并且让代码库变得易于浏览

![](./images/034/1.png)

此外,别把context.Context放到 struct 中。

context 本质上意味着它注定是短暂的,旨在贯穿与一段程序,而非成为一个对象状态的一部分(这里有一些例外情况,比如,HTTP 的 handler,大家习以为常地从请求中提取 context,这是因为这里 context 早已跟请求的生命周期关联起来了)。
context 本质上意味着它注定是短暂的,旨在贯穿于一段程序,而非成为对象状态的一部分(这里有一些例外情况,比如,HTTP 的 handler,大家习惯地从请求中提取 context,这是因为 context 早已跟请求的生命周期相关联了)。

2. Options结构体置于最后
## 2. Options结构体置于最后

“options结构体”模式是一个灵活而强大的方法,它能让函数在不破坏兼容性的前提下随着时间去演进。

我曾在推特上探讨过 options 结构体和可变参 options:<https://twitter.com/func25/status/1758435261183353308>
我曾在推特上探讨过 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)来表明一个操作是成功还是失败

某些情况中,如果布尔值更加妥当,比如说存在性检查,那么它也是放到最后的。

如果兼而有之,那么优先级应当是(x, bool, error)。

![](./images/034/3.png)

在譬如 TryFetchData 的场景中,bool 被用来表征存在性,特别是即便不存在也不被当做是一个错误的情况下
在譬如 TryFetchData 的场景中,bool 被用来表明存在性,特别是即便不存在也不会被当做是一个错误
2 changes: 1 addition & 1 deletion src/038.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

这会使调试错误和处理错误变得更加困难。

**使用 `fmt.Errorf``%w` **
**使用 `fmt.Errorf``%w`**

Go 1.13 版本引入了一种在保留原始错误的同时为其添加更多信息的方法,这就是通过 `fmt.Errorf` 函数配合 `%w` 符号来实现。

Expand Down
2 changes: 1 addition & 1 deletion src/041.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

- **对齐**:数据类型根据其大小具有特定的对齐要求。

例如,一个 int32 类型可能需要在 4 字节边界上对齐,这意味着它的启始内存地址应该是 4 的倍数。
例如,一个 int32 类型可能需要在 4 字节边界上对齐,这意味着它的起始内存地址应该是 4 的倍数。

- **填充**:为了满足对齐要求,编译器可能会在结构体字段之间插入未使用的空间(填充)。

Expand Down
2 changes: 1 addition & 1 deletion src/044.md
Original file line number Diff line number Diff line change
@@ -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”函数有意地允许程序停止。
Expand Down

0 comments on commit 15a0638

Please sign in to comment.