diff --git a/README.md b/README.md index 1e0cff9..631b3f8 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ Go tips from [Phuong Le](https://twitter.com/func25). | 65 | Returning Pointers Made Easy with Generics | miniLCT | | 66 | | | | 67 | | | -| 68 | | | +| 68 | Use the deadcode tool to find and remove unused functions | richzw | | 69 | Manage multiple goroutines with errgroup | richzw | | 70 | | | | 71 | sync.Pool, make it typed-safe with generics | QingyaFan | diff --git a/src/068.md b/src/068.md new file mode 100644 index 0000000..88ff06a --- /dev/null +++ b/src/068.md @@ -0,0 +1,40 @@ +# Tip #68 使用deadcode工具来找到和删除无用的函数 + +> 原始链接:[ Golang Tip #68: Use the deadcode tool to find and remove unused functions](https://twitter.com/func25/status/1776223724913725925) +> + +我们有时会有一些未使用的代码,我们称之为“死代码”。 + +这可能会让您在编写代码时感到困难,因为我们不确定是否可以删除它或更改它。 + +幸运的是,有一个名为`deadcode`的工具,可以帮助我们找到这些未使用的函数。我们可以使用以下命令进行安装: + +![](./images/068/001.png) + +我将其放在这里,以便您可以复制:`go install http://golang.org/x/tools/cmd/deadcode@latest` + +然后,使用以下简短的命令运行它: + +![](./images/068/002.png) + +运行后,它将显示未使用的函数及其在代码中的位置。 + +如果您想知道为什么使用某个函数,我们可以使用 `-whylive` 标志,该工具将告诉我们该函数是如何连接其它代码。 + +根据我的经验,有时该工具可能不准确。因此,使用此工具来帮助您决定可以删除哪些代码。 + +其工作原理(简化): + +- 1. 该工具首先阅读所有代码,检查类型。 + +- 2. 它将 `main()` 和任何 `init()` 标识为起始点。 + +- 3. 从这些起始点开始,`deadcode` 查看直接调用的函数,它列出正在使用的函数。 + +- 4. 然后,它检查通过接口间接调用的函数。 + +- 5. 该工具跟踪转换为接口的任何类型,因为这些类型的方法可能会被间接调用。 + +- 6. 在工具完成分析后,不在此列表中的任何函数都被视为“死代码”,这意味着该函数与主路径运行的代码没有连接。 + +您可以在此处阅读有关查找和删除死代码的更多信息:[https://go.dev/blog/deadcode](https://go.dev/blog/deadcode) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 626f13b..e6f25b5 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -16,6 +16,7 @@ - [Tip #47 表驱动测试,测试集和并行运行测试](./047.md) - [Tip #71 用泛型让 sync.Pool 类型安全](./071.md) - [Tip #65 使用泛型返回指针](./065.md) +- [Tip #68 使用deadcode工具来找到和删除无用的函数](./068.md) - [Tip #69 通过errgrup管理多个goroutine](./069.md) - [Tip #74 使 time.Duration 清晰易懂](./074.md) - [Tip #75 使用singleflight优化多次调用](./075.md) diff --git a/src/images/068/001.png b/src/images/068/001.png new file mode 100644 index 0000000..60fac71 Binary files /dev/null and b/src/images/068/001.png differ diff --git a/src/images/068/002.png b/src/images/068/002.png new file mode 100644 index 0000000..6250596 Binary files /dev/null and b/src/images/068/002.png differ