This commit is contained in:
Xargin
2016-09-22 14:13:24 +08:00
parent fa0bc79a25
commit 2b2529d2cc
6 changed files with 8 additions and 8 deletions

View File

@@ -264,7 +264,7 @@ len count
4 0
```
Map的value类型也可以是一个聚合类型比如是一个map或slice。在下面的代码中图graph的key类型是一个字符串value类型map[string]bool代表一个字符串集合。从概念上graph将一个字符串类型的key映射到一组相关的字符串集合它们指向新的graph的key。
Map的value类型也可以是一个聚合类型比如是一个map或slice。在下面的代码中图graph的key类型是一个字符串value类型map[string]bool代表一个字符串集合。从概念上graph将一个字符串类型的key映射到一组相关的字符串集合它们指向新的graph的key。
<u><i>gopl.io/ch4/graph</i></u>
```Go

View File

@@ -123,7 +123,7 @@ func add(t *tree, value int) *tree {
结构体类型的零值是每个成员都是零值。通常会将零值作为最合理的默认值。例如对于bytes.Buffer类型结构体初始值就是一个随时可用的空缓存还有在第9章将会讲到的sync.Mutex的零值也是有效的未锁定状态。有时候这种零值可用的特性是自然获得的但是也有些类型需要一些额外的工作。
如果结构体没有任何成员的话就是空结构体写作struct{}。它的大小为0也不包含任何信息但是有时候依然是有价值的。有些Go语言程序员用map模拟set数据结构时用它来代替map中布尔类型的value只是强调key的重要性但是因为节约的空间有限而且语法比较复杂所以我们通常会避免这样的用法。
如果结构体没有任何成员的话就是空结构体写作struct{}。它的大小为0也不包含任何信息但是有时候依然是有价值的。有些Go语言程序员用map模拟set数据结构时用它来代替map中布尔类型的value只是强调key的重要性但是因为节约的空间有限而且语法比较复杂所以我们通常会避免这样的用法。
```Go
seen := make(map[string]struct{}) // set of strings

View File

@@ -157,7 +157,7 @@ type User struct {
}
```
和前面一样即使对应的JSON对象名是小写字母每个结构体的成员名也是声明为大字母开头的。因为有些JSON成员名字和Go结构体成员名字并不相同因此需要Go语言结构体成员Tag来指定对应的JSON名字。同样在解码的时候也需要做同样的处理GitHub服务返回的信息比我们定义的要多很多。
和前面一样即使对应的JSON对象名是小写字母每个结构体的成员名也是声明为大字母开头的。因为有些JSON成员名字和Go结构体成员名字并不相同因此需要Go语言结构体成员Tag来指定对应的JSON名字。同样在解码的时候也需要做同样的处理GitHub服务返回的信息比我们定义的要多很多。
SearchIssues函数发出一个HTTP请求然后解码返回的JSON格式的结果。因为用户提供的查询条件可能包含类似`?``&`之类的特殊字符为了避免对URL造成冲突我们用url.QueryEscape来对查询中的特殊字符进行转义操作。
@@ -200,7 +200,7 @@ func SearchIssues(terms []string) (*IssuesSearchResult, error) {
在早些的例子中我们使用了json.Unmarshal函数来将JSON格式的字符串解码为字节slice。但是这个例子中我们使用了基于流式的解码器json.Decoder它可以从一个输入流解码JSON数据尽管这不是必须的。如您所料还有一个针对输出流的json.Encoder编码对象。
我们调用Decode方法来填充变量。这里有多种方法可以格式化结构。下面是最简单的一种以一个固定宽度打印每个issue但是在下一节我们将看到如利用模板来输出复杂的格式。
我们调用Decode方法来填充变量。这里有多种方法可以格式化结构。下面是最简单的一种以一个固定宽度打印每个issue但是在下一节我们将看到如利用模板来输出复杂的格式。
<u><i>gopl.io/ch4/issues</i></u>
```Go

View File

@@ -21,7 +21,7 @@ Age: {{.CreatedAt | daysAgo}} days
{% raw %}
这个模板先打印匹配到的issue总数然后打印每个issue的编号、创建用户、标题还有存在的时间。对于每一个action都有一个当前值的概念对应点操作符写作“.”。当前值“.”最初被初始化为调用模板的参数在当前例子中对应github.IssuesSearchResult类型的变量。模板中`{{.TotalCount}}`对应action将展开为结构体中TotalCount成员以默认的方式打印的值。模板中`{{range .Items}}``{{end}}`对应一个循环action因此它们直接的内容可能会被展开多次循环每次迭代的当前值对应当前的Items元素的值。
这个模板先打印匹配到的issue总数然后打印每个issue的编号、创建用户、标题还有存在的时间。对于每一个action都有一个当前值的概念对应点操作符写作“.”。当前值“.”最初被初始化为调用模板的参数在当前例子中对应github.IssuesSearchResult类型的变量。模板中`{{.TotalCount}}`对应action将展开为结构体中TotalCount成员以默认的方式打印的值。模板中`{{range .Items}}``{{end}}`对应一个循环action因此它们直接的内容可能会被展开多次循环每次迭代的当前值对应当前的Items元素的值。
{% endraw %}