Skip to content

Commit

Permalink
Merge pull request #174 from wzlove/master
Browse files Browse the repository at this point in the history
修改Tip#1-Tip#24中的markdown格式问题
  • Loading branch information
smallnest authored Apr 29, 2024
2 parents b93b9f7 + cd1603d commit dfd77fb
Show file tree
Hide file tree
Showing 10 changed files with 17 additions and 19 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Go tips from [Phuong Le](https://twitter.com/func25).
| 27 | Filter without any allocation | devin7788 |
| 28 | Converting multiple if-else statements into switch cases | zzzpppy |
| 29 | Avoid context.Background(), make your goroutines promisable. | stonemax |
| 30 | 使用context.WithoutCancel()继续上下文操作 | smallnest |
| 30 | Keep contexts going with context.WithoutCancel() | smallnest |
| 31 | Loop labels for cleaner breaks and continues | zhubiaook |
| 32 | Scheduling functions after context cancellation with context.AfterFunc | LinPr,smallnest |
| 33 | Just... Don’t Panic() | baxiang |
Expand Down
4 changes: 2 additions & 2 deletions src/018.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tip #18 在使用者的包中定义接口,而不是提供者的包中定义

> 原始链接:[Define interfaces in the consumer package, not the producer](https://twitter.com/func25/status/1756629777107292231)
> 原始链接:[Golang Tip #18: Define interfaces in the consumer package, not the producer](https://twitter.com/func25/status/1756629777107292231)
>
我之前在推特上提到过这个话题(https://twitter.com/func25/status/1738890734349201903),但它的重要性使我把它列入了这个tips的列表里。
Expand All @@ -15,7 +15,7 @@

2. 在提供者的包中使用具体类型作为返回值

这很简单,因为我们没有再提供者的包里定义这个接口
这很简单,因为我们没有在提供者的包里定义这个接口

它允许我们在这些类型上添加新方法,而不破坏这个API。

Expand Down
4 changes: 2 additions & 2 deletions src/021.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
在继续之前,这里有一个关于指针接收器与值接收器的简短介绍:https://twitter.com/func25/status/1757759982354026636

在Go中,规则并非是非黑即白的:“使用指针接收器进行修改,否则使用值接收器”。
在Go中,规则不是非黑即白的:“使用指针接收器进行修改,否则使用值接收器”。

一些指导原则:

Expand Down Expand Up @@ -35,7 +35,7 @@ https://twitter.com/func25/status/1731181436282208375

避免在给定结构体中混合使用不同的接收器类型,以保持一致性。

如果任何方法因为需要进行修改而使用指针接收器,通常最好为该结构体的所有方法都使用指针接收器,即使其中一些方法并不会引起修改。
如果任何方法因为需要进行修改而使用指针接收器,通常最好的办法是为该结构体的所有方法都使用指针接收器,即使其中一些方法并不会引起修改。

我想到的主要理由有:

Expand Down
4 changes: 1 addition & 3 deletions src/024.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
> 原始链接:[Golang Tip #24: Avoid repetition in naming](https://twitter.com/func25/status/1759196416961032620)
>
在编写代码时,我们通常以动词开头给函数命名,比如 get、set、fetch、update、calculate 等等...

## 1、包名与导出符号名称
在为对外可见(即在包外可见)的元素命名时,应避免重复使用包名。

Expand Down Expand Up @@ -57,5 +55,5 @@
- 在函数内部,特别是在处理与函数目的密切相关参数或数据时,以一个不好的示例为例:
![](./images/024/6.png)

我们将函数名和局部变量名都进行重命名:
- 我们将函数名和局部变量名都进行重命名:
![](./images/024/7.jpeg)
6 changes: 3 additions & 3 deletions src/025.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
>
- **chan bool:** 也可以用作信号传递,但是传递的信号为布尔值(true 或 false),表达的意义可能不太清晰。
- **chan struct{}:** 存粹用作信号传递,因为 struct{} 类型不占用内存。
- **chan struct{}:** 纯粹用作信号传递,因为 struct{} 类型不占用内存。

> "为什么倾向于选择 'chan struct{}'"
Expand All @@ -20,8 +20,8 @@

所以,使用 chan struct{} 有 2 个(主要的)优点:

- 由于 struct{} 不占用内存,通过 'chan struct{}' 不会在 channel 之间传递任何数据,只传递一个信号通知(一种微妙的内存优化手段)。
- 当开发者看到代码中的 'chan struct{}',可以立刻清楚的知道这个 channel 是用于信号传递的,从而减少了歧义。
- 由于 struct{} 不占用内存,通过 `chan struct{}` 不会在 channel 之间传递任何数据,只传递一个信号通知(一种微妙的内存优化手段)。
- 当开发者看到代码中的 `chan struct{}`,可以立刻清楚的知道这个 channel 是用于信号传递的,从而减少了歧义。

使用 chan struct{} 的缺点可能是有些笨拙的 "struct{}{}" 语法。

Expand Down
2 changes: 1 addition & 1 deletion src/026.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Tip #25 使用空标识符(_)明确忽略值,而不是无声地忽略它们
# Tip #26 使用空标识符(_)明确忽略值,而不是无声地忽略它们

> 原始链接:[Golang Tip #26: Explicitly ignore values with blank identifier (_) instead of silently ignoring them](https://twitter.com/func25/status/1759900581315870883)
>
Expand Down
2 changes: 1 addition & 1 deletion src/028.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
随后,回到我们的例子,让我们用我们刚刚讨论的内容来增强它:
![](./images/028/3.jpeg)

更多信息:[twitter.com/func25/status/…](https://x.com/func25/status/1745774945920245800?s=46)
更多信息:[twitter.com/func25/status/…](https://twitter.com/func25/status/1745774945920245800)
6 changes: 3 additions & 3 deletions src/029.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Tip #29 避免使用 context.Background,使你的协程具备承诺性
# Tip #29 避免使用 context.Background(),使你的协程具备承诺性

> 原始链接:[Golang Tip #29: Avoid context.Background(), make your goroutines promisable.](https://twitter.com/func25/status/1761025801716392106)
Expand All @@ -8,8 +8,8 @@

我们经常使用 Golang 协程处理并发任务,并且这些协程经常需要执行阻塞任务,比如:

* 执行 HTTP 请求
* 执行数据库查询、命令
* 执行 HTTP 请求
* 执行数据库查询、命令
* 从通道读取和写入数据
* ...

Expand Down
4 changes: 2 additions & 2 deletions src/032.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Tip #31 使用跳转标签让break和continue语句更简洁
# Tip #31 在上下文取消后使用`context.AfterFunc`来执行调度函数

> 原始链接: [Golang Tip #32: Scheduling functions after context cancellation with context.AfterFunc](https://twitter.com/func25/status/1762087461839364445)
>
[tip #30](https://colobu.com/gotips/030.html),我们学习了如何使一个Context在其Context停止时仍能继续运行:

现在,让我们来看一下Go 1.21引入的一项新特性
现在,让我们来看一下`Go 1.21`引入的一项新特性

`context.AfterFunc`允许您设置一个回调函数`f`,在ctx结束后(无论因取消还是超时)在新的goroutine中运行。

Expand Down
2 changes: 1 addition & 1 deletion src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
- [Tip #29 避免使用 context.Background,使你的协程具备承诺性](./029.md)
- [Tip #30 使用context.WithoutCancel()继续上下文操作](./030.md)
- [Tip #31 使用跳转标签让break和continue语句更简洁](./031.md)
- [Tip #32 使用跳转标签让break和continue语句更简洁](./032.md)
- [Tip #32 在上下文取消后使用`context.AfterFunc`来执行调度函数](./032.md)
- [Tip #33 尽量...不要使用panic()](./033.md)
- [Tip #34 以context开头,以options结尾,并且总是用error来关闭](./034.md)
- [Tip #35 转换字符串时优先使用 strconv 而非 fmt](./035.md)
Expand Down

0 comments on commit dfd77fb

Please sign in to comment.