Xargin 2018-01-17 17:45:45 +08:00
commit 9ac3956583
4 changed files with 5 additions and 5 deletions

View File

@ -113,7 +113,7 @@
* [示例: 编码S表达式](ch12/ch12-04.md)
* [通过reflect.Value修改值](ch12/ch12-05.md)
* [示例: 解码S表达式](ch12/ch12-06.md)
* [获取结构体字段标识](ch12/ch12-07.md)
 * [获取结构体字段标签](ch12/ch12-07.md)
* [显示一个类型的方法集](ch12/ch12-08.md)
* [几点忠告](ch12/ch12-09.md)
* [底层编程](ch13/ch13.md)

View File

@ -1,6 +1,6 @@
## 12.7. 获取结构体字段标
## 12.7. 获取结构体字段标
在4.5节我们使用构体成员标签用于设置对应JSON对应的名字。其中json成员标签让我们可以选择成员的名字和抑制零值成员的输出。在本节我们将看到如通过反射机制类获取成员标签。
在4.5节我们使用构体成员标签用于设置对应JSON对应的名字。其中json成员标签让我们可以选择成员的名字和抑制零值成员的输出。在本节我们将看到如通过反射机制类获取成员标签。
对于一个web服务大部分HTTP处理函数要做的第一件事情就是展开请求中的参数到本地变量中。我们定义了一个工具函数叫params.Unpack通过使用结构体成员标签机制来让HTTP处理函数解析请求参数更方便。

View File

@ -16,5 +16,5 @@ fmt.Printf("%d %s\n", "hello", 42) // "%!d(string=hello) %!s(int=42)"
避免使用反射的第二个原因是即使对应类型提供了相同文档但是反射的操作不能做静态类型检查而且大量反射的代码通常难以理解。总是需要小心翼翼地为每个导出的类型和其它接受interface{}或reflect.Value类型参数的函数维护说明文档。
第三个原因,基于反射的代码通常比正常的代码运行速度慢一到两个数量级。对于一个典型的项目,大部分函数的性能和程序的整体性能关系不大,所以使用反射可能会使程序更加清晰。测试是一个特别适合使用反射的场景,因为每个测试的数据集都很小。但是对于性能关键路径的函数,最好避免使用反射。
第三个原因,基于反射的代码通常比正常的代码运行速度慢一到两个数量级。对于一个典型的项目,大部分函数的性能和程序的整体性能关系不大,所以当反射能使程序更加清晰的时候可以考虑使用。测试是一个特别适合使用反射的场景,因为每个测试的数据集都很小。但是对于性能关键路径的函数,最好避免使用反射。

View File

@ -11,7 +11,7 @@ if err != nil{
}
```
当对html.Parse的调用失败时findLinks不会直接返回html.Parse的错误因为缺少两条重要信息1、错误发生在解析器2、url已经被解析。这些信息有助于错误的处理findLinks会构造新的错误信息返回给调用者
当对html.Parse的调用失败时findLinks不会直接返回html.Parse的错误因为缺少两条重要信息1、发生错误时的解析器html parser2、发生错误的url。因此findLinks构造了一个新的错误信息既包含了这两项也包括了底层的解析出错的信息。
```Go
doc, err := html.Parse(resp.Body)