Skip to content

Commit

Permalink
Merge pull request #181 from wzlove/master
Browse files Browse the repository at this point in the history
修改65-73的格式问题
  • Loading branch information
smallnest authored May 7, 2024
2 parents 4a0ca6d + a33540a commit 9ff22f3
Show file tree
Hide file tree
Showing 12 changed files with 20 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/064.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

- 我想决定应用程序如何结束,是报错退出(退出代码 1)还是没有任何问题的退出(退出代码 0)。

此外,如果您还没有这样做,请查看[[Tip #43](./043.md)
此外,如果您还没有这样做,请查看[Tip #43](./043.md)

因此,让我们将所有的设置工作从 main 函数中移出:

Expand Down
2 changes: 1 addition & 1 deletion src/067.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func SendEmail(subj string, receip string, body string, attachmentPaths []string
在不破坏代码流程(从上到下)的情况下,有几种解决方法:

1. 长参数可能表明函数的功能超出了应有的范围,考虑将其拆分为较小的函数。
2. 如果任何参数是可选的,请考虑使用可选的结构体或变长函数。这一技术在我之前分享的tips中介绍过([Tips#22](https://twitter.com/func25/status/1758435261183353308))。
2. 如果任何参数是可选的,请考虑使用可选的结构体或变长函数。这一技术在我之前分享的tips中介绍过([Tips#22](./022.md))。
3. 如果参数是必需的,仍然可以将它们分组到一个结构体中并进行验证,必要时抛出错误。
4. 使用仍然清晰且描述准确的较短名称。
5. 具有相同类型的参数可以在类型前声明一次。
Expand Down
2 changes: 1 addition & 1 deletion src/068.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

![](./images/068/001.png)

我将其放在这里,以便您可以复制:`go install http://golang.org/x/tools/cmd/deadcode@latest`
我将其放在这里,以便您可以复制:`go install golang.org/x/tools/cmd/deadcode@latest`

然后,使用以下简短的命令运行它:

Expand Down
6 changes: 3 additions & 3 deletions src/069.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

这里有三个概念:

- 要并发运行任务,请使用 `g.Go()`` 启动一个 goroutine 并传递一个函数。
- 使用 `g.Wait()`` 等待所有 goroutine 完成,它会返回第一个发生的错误,而不是所有错误。
- `errgroup` 与context很搭配
- 要并发运行任务,请使用 `g.Go()` 启动一个 goroutine 并传递一个函数。
- 使用 `g.Wait()` 等待所有 goroutine 完成,它会返回第一个发生的错误,而不是所有错误。
- `errgroup` `context` 很搭配

通过使用 `errgroup.WithContext()`,如果发生错误,context将被取消。

Expand Down
4 changes: 2 additions & 2 deletions src/070.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

![tips-070-img1](./images/070/tips070-img1.png)

> 我们在Tips #63 中讨论了解决方案:[避免 time.Sleep ()](https://twitter.com/func25/status/1774070336214253734)
> 我们在Tips #63 中讨论了解决方案:[避免 time.Sleep ()](./063.md)
我们之前讨论的解决方案是可行的,但是一遍又一遍地写就有点麻烦了。

Expand All @@ -17,7 +17,7 @@

![tips070-img3](./images/070/tips070-img2.png)

https://go.dev/play/p/FErMIDKoulb
[https://go.dev/play/p/FErMIDK...](https://go.dev/play/p/FErMIDKoulb)

这样,我们可以在 Go 中暂停代码,但如果有东西告诉`context`停止,Sleep将提前结束:

Expand Down
2 changes: 1 addition & 1 deletion src/071.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@
泛型已经为我们确保了类型,所以我们不需要担心转换失败。
sync.Pool 始终只包含类型 T 的实例,因此在正常情况下,断言 p.internal.Get(T) 不会引发 panic。

实例代码参见:https://go.dev/play/p/N3suxuK-yCp
实例代码参见:[go.dev/play/p/N3suxuK...](https://go.dev/play/p/N3suxuK-yCp)
4 changes: 2 additions & 2 deletions src/072.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tip #72 使用strings.EqualFold进行忽略大小写的字符串比较

> 原始链接:[Case-Insensitive string comparison with strings.EqualFold](https://twitter.com/func25/status/1777673942079283694)
> 原始链接:[Golang Tip #72: Case-Insensitive string comparison with strings.EqualFold](https://twitter.com/func25/status/1777673942079283694)
>
当你需要比较字符串且不关心字母是大写还是小写时,你可能会想到:
Expand Down Expand Up @@ -49,4 +49,4 @@ s2 := "resume\u0301" // 'e' 后跟一个组合重音符

在这种情况下,仅使用 strings.EqualFold 将不够,因为这些字符看起来相同但编码不同。

要正确比较这些字符串,您将需要其他方法来处理字符串,参考[http://golang.org/x/text/nocode/norm](http://golang.org/x/text/nocode/norm)
要正确比较这些字符串,您将需要其他方法来处理字符串,参考[golang.org/x/text/unicode...](http://golang.org/x/text/nocode/norm)
2 changes: 1 addition & 1 deletion src/073.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tip #73 用stringer工具给枚举类型实现String()方法

> 原始链接:[ Implement String() for enum with the stringer tool](https://twitter.com/func25/status/1778027410929410111)
> 原始链接:[Golang Tip #73: Implement String() for enum with the stringer tool](https://twitter.com/func25/status/1778027410929410111)
>
你是否注意到,在你用Go语言打印中打印持续时间的时候,比如:fmt.Println(time.Second),它显示为"1s"而不是"1000000000",尽管 time.Duration的底层类型是int64类型。
Expand Down
2 changes: 1 addition & 1 deletion src/075.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ key 本质上是请求的标识符。

当多个请求具有相同的关键字时,`singleflight`就会意识到它们**请求**的是同一件事。

您可以再这里看到实际操作: https://go.dev/play/p/dxQQrznx7m4
您可以再这里看到实际操作: [go.dev/play/p/dxQQrzn...](https://go.dev/play/p/dxQQrznx7m4)

使用这种方法,如果同一函数被同时调用**多次** ,则只对该函数进行一次实际调用。然后,所有调用者共享这一次调用的结果。

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

![tips076-img4](./images/076/tips076-img4.png)

这个技巧与我在之前提到的“must”函数结合使用时效果非常好。具体详见:[Golang Tip #44: Intentionally Stop with Must Functions](https://twitter.com/func25/status/1766442686624784496)
这个技巧与我在之前提到的“must”函数结合使用时效果非常好。具体详见:[Golang Tip #44: Intentionally Stop with Must Functions](./044.md)

我还有一个小的通用的辅助的函数,如果没有error的时候它会返回结果,否则就会停止运行。

Expand Down
6 changes: 5 additions & 1 deletion src/077.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,8 @@

![tips077-img4](./images/077/tips077-img4.png)

此外,http://golang.org/x/sync/semaphore 包中提供了一个信号量的实现,是加权信号量,加权信号量允许一个 goroutine 占用多个槽位,适用于每个 goroutine 资源消耗不同的情况。例如,管理数据库的连接池时,某些操作可能需要一次使用多个连接。
此外,[golang.org/x/sync/semaphore...](http://golang.org/x/sync/semaphore) 包中提供了一个信号量的实现,是加权信号量。

加权信号量允许一个 goroutine 占用多个槽位,适用于每个 goroutine 资源消耗不同的情况。

例如,管理数据库的连接池时,某些操作可能需要一次使用多个连接。
2 changes: 1 addition & 1 deletion src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@
- [Tip #62 context.Value不是我们的朋友](./062.md)
- [Tip #63 避免使用time.Sleep(),它不能被context感知且无法被中断](./063.md)
- [Tip #64 让main()函数更清晰并且易于测试](./064.md)
- [Tip #66 在fmt.Errorf中简化你的错误信息](./066.md)
- [Tip #65 使用泛型返回指针](./065.md)
- [Tip #66 在fmt.Errorf中简化你的错误信息](./066.md)
- [Tip #67 如何处理长函数签名](./067.md)
- [Tip #68 使用deadcode工具来找到和删除无用的函数](./068.md)
- [Tip #69 通过errgrup管理多个goroutine](./069.md)
Expand Down

0 comments on commit 9ff22f3

Please sign in to comment.