Merge pull request #48 from qinhanlei/patch-17

Update ch12-09.md
This commit is contained in:
Xargin 2017-12-15 15:30:22 +08:00 committed by GitHub
commit 06093965fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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