From 7221191c30a7db8ba4bd73bad14b9024b638a551 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 17 Oct 2014 23:43:37 -0400 Subject: [PATCH] 6.10 --- README.md | 2 +- eBook/06.10.md | 42 ++++++++++++++++++++++++++++++++++++++++++ eBook/06.11.md | 3 +++ eBook/6.10.md | 4 ---- eBook/directory.md | 1 + 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 eBook/06.10.md create mode 100644 eBook/06.11.md delete mode 100644 eBook/6.10.md diff --git a/README.md b/README.md index a05b435..99915a1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -6.9 [应用闭包:将函数作为返回值](eBook/06.9.md) +6.10 [使用闭包调试](eBook/06.10.md) ## 支持本书 diff --git a/eBook/06.10.md b/eBook/06.10.md new file mode 100644 index 0000000..bd31d84 --- /dev/null +++ b/eBook/06.10.md @@ -0,0 +1,42 @@ +# 6.10 使用闭包调试 + +当您在分析和调试复杂的程序时,无数个函数在不同的代码文件中相互调用,如果这时候能够准确地知道哪个文件中的具体哪个函数正在执行,对于调试是十分有帮助的。您可以使用 `runtime` 或 `log` 包中的特殊函数来实现这样的功能。包 `runtime` 中的函数 `Caller()` 提供了相应的信息,因此可以在需要的时候实现一个 `where()` 闭包函数来打印函数执行的位置: + +```go +where := func() { + _, file, line, _ := runtime.Caller(1) + log.Printf("%s:%d", file, line) +} +where() +// some code +where() +// some more code +where() +``` + +您也可以设置 `log` 包中的 flag 参数来实现: + +```go +log.SetFlags(log.Llongfile) +log.Print("") +``` + +或使用一个更加简短版本的 `where` 函数: + +```go +var where = log.Print +func func1() { +where() +... some code +where() +... some code +where() +} +``` + +## 链接 + +- [目录](directory.md) +- 上一节:[应用闭包:将函数作为返回值](06.9.md) +- 下一节:[计算函数执行时间](06.11.md) + diff --git a/eBook/06.11.md b/eBook/06.11.md new file mode 100644 index 0000000..a9297b3 --- /dev/null +++ b/eBook/06.11.md @@ -0,0 +1,3 @@ +# 6.11 计算函数执行时间 + +154 \ No newline at end of file diff --git a/eBook/6.10.md b/eBook/6.10.md deleted file mode 100644 index c60e968..0000000 --- a/eBook/6.10.md +++ /dev/null @@ -1,4 +0,0 @@ -# 6.10 使用闭包调试 - - -153 \ No newline at end of file diff --git a/eBook/directory.md b/eBook/directory.md index 48ad736..6fac4c7 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -56,6 +56,7 @@ - 6.8 [闭包](06.8.md) - 6.9 [应用闭包:将函数作为返回值](06.9.md) - 6.10 [使用闭包调试](06.10.md) + - 6.11 [计算函数执行时间](06.11.md) - 第7章:数组(array)与切片(slice) - 第8章:Maps - 第9章:包(package)