扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容主要讲解“如何优化go性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何优化go性能”吧!
创新互联公司主要从事网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务城中,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
记录一下对核心处理逻辑的优化
因为虚拟ip对应十进制数范围是168493058, 168558590,因此我们将其类型从int改成uint64,不改成uint32是为了好计算; 其次字符串拼接方法用string.Join,在最后,是用数组代替切片的场景
// 对应的虚拟IP段是 10.11.0.2 10.11.255.253 最小和最大可以分配的虚拟IP对应的uint64 const VIPMIN, VIPMAX uint64 = 168493058, 168558590 var fieldMaps = [4]uint64{24, 16, 8, 0} // OctToVipArray 数组 func OctToVipArray(vipOct uint64) (addr string) { if vipOct < VIPMIN && vipOct > VIPMAX { log.Fatal("传入错误十进制整数,检查是否所有虚拟IP都分配出去") return } else { var vips [4]string for index, value := range fieldMaps { vips[index] = strconv.FormatUint(vipOct>>value&0xff, 10) } return strings.Join(vips[:], ".") } }
// octToVipSlice 切片 func OctToVipSlice(vipOct uint64) (addr string) { if vipOct < VIPMIN && vipOct > VIPMAX { log.Fatal("传入错误十进制整数,检查是否所有虚拟IP都分配出去") return } else { var vips []string for _, value := range fieldMaps { vips = append(vips, strconv.FormatUint(vipOct>>value&0xff, 10)) } return strings.Join(vips, ".") } }
测试函数
// 基准测试 func BenchmarkA(b *testing.B) { b.ResetTimer() for index := uint64(168507432); index <= uint64(168558590); index++ { // 待测试方法 OctToVipArray(168493058) } } func BenchmarkB(b *testing.B) { b.ResetTimer() for index := uint64(168507432); index <= uint64(168558590); index++ { // 待测试方法 OctToVipSlice(168493058) } }
# 测试Benchmark开头的 go test -bench=Benchmark* -benchmem -run=none # 看cpu和内存 go test -bench=Benchmark* -benchmem -run=none -memprofile memprofile.out -cpuprofile profile.out
测试截图
cpu
内存
到此,相信大家对“如何优化go性能”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流