转载自达达的博客
在一些通用化的接口设计中,我们不得不用interface{}来代表任意类型,然后在接口内部用类型转换来判断具体类型,从而执行具体逻辑。但是类型判断是有性能代价的,如果能具像化的知道这个性能代价有多大,就可以帮助我们设计接口的时候判断应该怎么设计。
下面是实验代码:
1 | package labs01 |
执行结果:
1
2
3
4
5
6
7dada-imac:misc dada$ go test -test.bench=".*" labs01
testing: warning: no tests to run
PASS
Benchmark_TypeSwitch 50000000 33.0 ns/op
Benchmark_NormalSwitch 2000000000 1.99 ns/op
Benchmark_InterfaceSwitch 100000000 18.4 ns/op
ok labs 7.741s结论:类型判断和类型转换这两个操作都比直接操作多几倍的消耗。