ch10-7-6: review

This commit is contained in:
chai2010 2016-01-08 22:03:49 +08:00
parent 6ddeeabbff
commit 0f2fef2881
2 changed files with 13 additions and 16 deletions

View File

@ -6,7 +6,7 @@
![](../images/ch10-01.png) ![](../images/ch10-01.png)
爲了滿足這些需求Go語言的構建工具對包含internal名字的路徑段的包導入路徑做了特殊處理。這種包叫internal包一個internal包隻能被和internal目録有同一個父目録的包所導入。例如net/http/internal/chunked內部包隻能被net/http/httputil或net/http包導入但是不能被net/url包導入。不過net/url包可以導入net/http/httputil包。 爲了滿足這些需求Go語言的構建工具對包含internal名字的路徑段的包導入路徑做了特殊處理。這種包叫internal包一個internal包隻能被和internal目録有同一個父目録的包所導入。例如net/http/internal/chunked內部包隻能被net/http/httputil或net/http包導入但是不能被net/url包導入。不過net/url包可以導入net/http/httputil包。
``` ```
net/http net/http

View File

@ -1,13 +1,13 @@
### 10.7.6. 査詢包 ### 10.7.6. 査詢包
`go list` 工具可以報告可用包的信息. 其最簡單的形式, 可以測試包是否在工作區併打印他的導入路徑: `go list`命令可以査詢可用包的信息。其最簡單的形式,可以測試包是否在工作區併打印它的導入路徑:
``` ```
$ go list github.com/go-sql-driver/mysql $ go list github.com/go-sql-driver/mysql
github.com/go-sql-driver/mysql github.com/go-sql-driver/mysql
``` ```
`go list` 參數還可以用 `"..."` 表示匹配任意的包的導入路徑. 我們可以用它來列表工作區中的所有包: `go list`命令的參數還可以用`"..."`表示匹配任意的包的導入路徑。我們可以用它來列表工作區中的所有包:
``` ```
$ go list ... $ go list ...
@ -20,7 +20,7 @@ cmd/api
...many more... ...many more...
``` ```
或者是特定子目録下的所有包: 或者是特定子目録下的所有包
``` ```
$ go list gopl.io/ch3/... $ go list gopl.io/ch3/...
@ -33,7 +33,7 @@ gopl.io/ch3/printints
gopl.io/ch3/surface gopl.io/ch3/surface
``` ```
或者是和某個主體相關的: 或者是和某個主題相關的所有包:
``` ```
$ go list ...xml... $ go list ...xml...
@ -41,7 +41,7 @@ encoding/xml
gopl.io/ch7/xmlselect gopl.io/ch7/xmlselect
``` ```
`go list` 可以獲取每個包完整的元信息, 而不僅僅隻是導入路徑, 這些信息可以以不同格式提供給用戶. 其中 `-json` 標誌參數表示用JSON格式打印每個包的元信息. `go list`命令還可以獲取每個包完整的元信息,而不僅僅隻是導入路徑,這些元信息可以以不同格式提供給用戶。其中`-json`命令行參數表示用JSON格式打印每個包的元信息。
``` ```
$ go list -json hash $ go list -json hash
@ -71,7 +71,7 @@ $ go list -json hash
} }
``` ```
參數 `-f` 允許用戶使用 text/template (§4.6) 的模闆語言定義輸出文本的格式. 下面的命令打印 strconv 包的依賴的包, 然後用 join 模闆函數鏈接爲一行, 用一個空格分隔: 命令行參數`-f`則允許用戶使用text/template包§4.6的模闆語言定義輸出文本的格式。下面的命令將打印strconv包的依賴的包然後用join模闆函數將結果鏈接爲一行連接時每個結果之間用一個空格分隔
{% raw %} {% raw %}
``` ```
@ -80,7 +80,7 @@ errors math runtime unicode/utf8 unsafe
``` ```
{% endraw %} {% endraw %}
譯註: 上面的命令在 Windows 的命令行運行會遇到 `template: main:1: unclosed action` 的錯誤. 産生錯誤的原因是因爲命令行對里面的 `" "` 參數進行轉義了. 按照下面的方法解決轉義字符串的問題: 譯註上面的命令在Windows的命令行運行會遇到`template: main:1: unclosed action`的錯誤。産生這個錯誤的原因是因爲命令行對命令中的`" "`參數進行了轉義處理。可以按照下面的方法解決轉義字符串的問題:
{% raw %} {% raw %}
``` ```
@ -88,7 +88,7 @@ $ go list -f "{{join .Deps \" \"}}" strconv
``` ```
{% endraw %} {% endraw %}
下面的命令打印 compress 子目録下所有包的依賴包列表: 下面的命令打印compress子目録下所有包的依賴包列表
{% raw %} {% raw %}
``` ```
@ -101,7 +101,7 @@ compress/zlib -> bufio compress/flate errors fmt hash hash/adler32 io
``` ```
{% endraw %} {% endraw %}
譯註: Windows 下同樣有問題, 要避免轉義字符串的問題: 譯註Windows下有同樣有問題要避免轉義字符串的榦擾
{% raw %} {% raw %}
``` ```
@ -109,11 +109,8 @@ $ go list -f "{{.ImportPath}} -> {{join .Imports \" \"}}" compress/...
``` ```
{% endraw %} {% endraw %}
go list 命令對於一次性的交互式査詢或自動化構建和測試腳本都很有幫助. 我們將在 11.2.4節 中再次使用它. 更多的信息, 包括可設置的字段和意義, 可以用 `go help list` 命令査看. `go list`命令對於一次性的交互式査詢或自動化構建或測試腳本都很有幫助。我們將在11.2.4節中再次使用它。每個子命令的更多信息,包括可設置的字段和意義,可以用`go help list`命令査看。
在本章, 我們解釋了Go工具箱除了測試命令之外的所有重要的命令. 在下一章, 我們將看到如何用 `go test` 命令去測試Go程序.
**練習10.4:** 創建一個工具, 根據命令行指定的參數, 報告工作區所有依賴指定包的其他包集合. 提示: 你需要運行 `go list` 命令兩次, 一次用於初始化包, 一次用於所有包. 你可能需要用 encoding/json (§4.5) 包來分析輸出的 JSON 格式的信息.
在本章我們解釋了Go語言工具中除了測試命令之外的所有重要的子命令。在下一章我們將看到如何用`go test`命令去運行Go語言程序中的測試代碼。
**練習 10.4** 創建一個工具,根據命令行指定的參數,報告工作區所有依賴指定包的其它包集合。提示:你需要運行`go list`命令兩次一次用於初始化包一次用於所有包。你可能需要用encoding/json§4.5包來分析輸出的JSON格式的信息。