golang性能优化及测试用例编写
发布于 2021-11-04 15:07 ,所属分类:软件编程学习资料
前言
在日常开发中,我们有时候会写到测试用例,但是对于新手来说,并不知道测试用例该如何编写,也不知道测试用例的用途。
在本文中,我们将讲解如何编写一个性能高效的golang函数。
如何编写测试用例
编写测试用例时,我们最主要用到golang的testing内置包。假设,我们想测试package main下的calc.go中的函数,只需新建calc_test.go文件,在calc_test.go中新建测试用例即可。
// calc.go
package main
func add (n1, n2 int) int {
return n1 + n2
}
calc_test.go文件:
//calc_test.go
packagemain
import"testing"
funcTestAdd(t*testing.T){
ifans:=add(1,2);ans!=3{
t.Error("add(1,2)shouldbeequalto3")
}
}
上面就是一个简单的小测试。
并且我们只需在控制台运行go test
,将会自动运行当前package下的所有测试用例,也可通过添加-v
参数进行查看详细信息。
性能优化
性能优化其实是一个笼统的说话,可以简单地理解为通过该过程可以使你的代码变得更加的优雅,程序运行速度更快速。
性能优化的前提
性能优化的前提就是把所有的一切都建立在好的基础上,先使代码稳固运行再去做优化,这就是it界常说的————能跑就行。
只要代码不能运行,任何优化都是毫无意义的手段。
性能优化的限制
对于任何一种语言来说,硬件资源都是硬伤,你软件优化做的再好,硬件跟不上还是不行。
还有就是对于软件架构的设计,一个良好的架构能够使软件的性能提升至少15%!并且,一个软件的架构也不是一成不变的,这就是我们经常看到的,一个软件随着用户的增多,后天架构不断改变的原因。
在编程领域中,每年都有新的技术产生,也会有新的架构出来,谁也无法保证一个具有多年历史的架构设计能打得过一个新出的结构设计。
做优化的时机
一般来说,一个软件是否进行优化并不是开发者一个人说的算的,而是无数的用户+程序反馈。我总结出以下几点:
当程序中某一个函数频繁的被调用时 当用户反馈程序运行慢时 当程序占用大量的系统资源,并无法查找到原因时 当某个数据结构占用了大量的系统内存时 当你的代码太乱,开发者自己都看不懂时。。。
该如何对程序进行优化
往事开头难,当需求让我们对一个程序进行优化时,我们可能会一脸懵逼,该如何进行优化?该优化些什么?到底如何做优化?
接下来我们就慢慢的从哪里开始优化说起。
优化应该从业务层开始。
举一个经典的案例,GTA online的游戏启动进程中那个要跑1.9亿次的if判断。将该过程优化后,至少能减少60%的时间启动游戏!
有了开头我们就可以慢慢的根据业务场景进行优化。不同业务场景的优化侧重也是不同的。
对于大多数业务来说,内存一般不是瓶颈,所以业务API的优化主要集中于延迟和吞吐量。尽量使用事务去操作数据库。
现代数据库虽然说支持高并发,但是当超过一定的并发量后,就会使数据库压力莫名增大n倍,可能会在短时间内使数据库重启。使用事务时,可通过事务隔离及事务锁来进行优化查询。当服务到达一定量时,应采取分布式进行优化。
日常开发中,我们一般都是在一个测试服务器中进行调试及优化,但是,当我们需要的服务过多时,服务器性能被压榨到了极致,会出现服务莫名挂掉的现象,这是因为linux的进程保护规则,所以我们呢应该将消耗系统资源较大的服务转移到其他服务器上,供给足够的系统资源使之能更加高效的运行。
后记
优化和测试用例的编写,其实并不是在开发后才去进行的,在开发过程中,也可以对代码进行优化,严格要求自己遵循开发规范,并在工作过程中通过吸取教训来完善自己。
我的gongzhong号
相关资源