mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-05 05:53:45 +00:00
Merge branch 'master' of https://github.com/gopl-zh/gopl-zh.github.com
This commit is contained in:
commit
9ac3956583
@ -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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
## 12.7. 获取结构体字段标识
|
||||
## 12.7. 获取结构体字段标签
|
||||
|
||||
在4.5节我们使用构体成员标签用于设置对应JSON对应的名字。其中json成员标签让我们可以选择成员的名字和抑制零值成员的输出。在本节,我们将看到如果通过反射机制类获取成员标签。
|
||||
在4.5节我们使用构体成员标签用于设置对应JSON对应的名字。其中json成员标签让我们可以选择成员的名字和抑制零值成员的输出。在本节,我们将看到如何通过反射机制类获取成员标签。
|
||||
|
||||
对于一个web服务,大部分HTTP处理函数要做的第一件事情就是展开请求中的参数到本地变量中。我们定义了一个工具函数,叫params.Unpack,通过使用结构体成员标签机制来让HTTP处理函数解析请求参数更方便。
|
||||
|
||||
|
@ -16,5 +16,5 @@ fmt.Printf("%d %s\n", "hello", 42) // "%!d(string=hello) %!s(int=42)"
|
||||
|
||||
避免使用反射的第二个原因是,即使对应类型提供了相同文档,但是反射的操作不能做静态类型检查,而且大量反射的代码通常难以理解。总是需要小心翼翼地为每个导出的类型和其它接受interface{}或reflect.Value类型参数的函数维护说明文档。
|
||||
|
||||
第三个原因,基于反射的代码通常比正常的代码运行速度慢一到两个数量级。对于一个典型的项目,大部分函数的性能和程序的整体性能关系不大,所以使用反射可能会使程序更加清晰。测试是一个特别适合使用反射的场景,因为每个测试的数据集都很小。但是对于性能关键路径的函数,最好避免使用反射。
|
||||
第三个原因,基于反射的代码通常比正常的代码运行速度慢一到两个数量级。对于一个典型的项目,大部分函数的性能和程序的整体性能关系不大,所以当反射能使程序更加清晰的时候可以考虑使用。测试是一个特别适合使用反射的场景,因为每个测试的数据集都很小。但是对于性能关键路径的函数,最好避免使用反射。
|
||||
|
||||
|
@ -11,7 +11,7 @@ if err != nil{
|
||||
}
|
||||
```
|
||||
|
||||
当对html.Parse的调用失败时,findLinks不会直接返回html.Parse的错误,因为缺少两条重要信息:1、错误发生在解析器;2、url已经被解析。这些信息有助于错误的处理,findLinks会构造新的错误信息返回给调用者:
|
||||
当对html.Parse的调用失败时,findLinks不会直接返回html.Parse的错误,因为缺少两条重要信息:1、发生错误时的解析器(html parser);2、发生错误的url。因此,findLinks构造了一个新的错误信息,既包含了这两项,也包括了底层的解析出错的信息。
|
||||
|
||||
```Go
|
||||
doc, err := html.Parse(resp.Body)
|
||||
|
Loading…
Reference in New Issue
Block a user