some test code of golang
go test -test.bench=".*"
N = 45
testing: warning: no tests to run
Benchmark_Recursive-4 1 10018573100 ns/op
Benchmark_Loop-4 2000000000 0.00 ns/op
Benchmark_Stack-4 2000000000 0.00 ns/op
PASS
ok github.com/vipally/glab/lab2 10.154s
结论:
本测试求Fibonacci(45) 递归算法已经无法忍受 当N再增加到50以上的时候 递归算法已经无法算出结果
而采用循环和stack的算法 N=10亿 仍然毫无压力
含有匿名成员的结构体 可以由父对象默认实现某个接口 达到实现某接口默认行为
子对象可以实现该函数 覆盖父对象的默认行为
BUG:对range变量x进行取地址将会是一场灾难 因为go是值拷贝 并且range变量会在遍历期间重用
如果对该变量取地址 那么存下来的东西就只剩集合里面最后一个元素了
这个问题可以跟Go提一个issue,禁止对range变量取地址
结论:对同样大小的slice和map执行range,对map的遍历慢10倍
对string range,得到的是rune字符序列,index不一定连续 对string取下标 得到的是对应[]byte的字节