Golang性能优化技巧(三)

概述

本文主要介绍闭包、channel和接口相关的性能开销

golang中提供了很多语法糖,但它们都有较复杂的实现方式,因此使用它们时需要小心,在对性能要求较高的场景尽量不要使用

匿名函数的性能开销

代码

import "testing"

func test(x int) int {
	return x * 2
}

// 普通函数调用
func BenchmarkTest(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = test(i)
	}
}

// 匿名函数调用
func BenchmarkAnomy(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = func(x int) int {
			return x * 2
		}(i)
	}
}

// 闭包
func BenchmarkClosure(b *testing.B) {
	for i := 0; i < b.N; i++ {
		_ = func() int {
			return i * 2
		}()
	}
}

运行

% go test -v -bench . -benchmem
goos: darwin
goarch: amd64
BenchmarkTest
BenchmarkTest-8      	1000000000	         0.542 ns/op	       0 B/op	       0 allocs/op
BenchmarkAnomy
BenchmarkAnomy-8     	1000000000	         0.543 ns/op	       0 B/op	       0 allocs/op
BenchmarkClosure
BenchmarkClosure-8   	830409748	         1.44 ns/op	       0 B/op	       0 allocs/op

结论

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值