gpt4 book ai didi

go - 将闭包声明为循环(在性能上下文中)

转载 作者:IT王子 更新时间:2023-10-29 01:45:41 25 4
gpt4 key购买 nike

以下三种实现之间是否存在差异(在性能方面)?:


mustGetSpeed := func() string {
...
return speed
}

for _, item := range items {
speed, err := strconv.Atoi(mustGetSpeed())
...
}

for _, item := range items {
mustGetSpeed := func() string {
...
return speed
}
speed, err := strconv.Atoi(mustGetSpeed())
...
}

for _, item := range items {
speed, err := strconv.Atoi(func() string {
...
return speed
}())
...
}

将闭包声明为循环是否错误(在性能方面)?

最佳答案

您在猜测性能问题。不要那样做。了解一些事实。运行一些基准测试。例如,

package main

import (
"strconv"
"testing"
)

const sound = "1236" // speed of sound 1,236 kilometres per hour

var items = make([]int, 1024)

func BenchmarkClosure1(b *testing.B) {
for i := 0; i < b.N; i++ {
mustGetSpeed := func() string {
speed := sound
// ...
return speed
}
for _, item := range items {
speed, err := strconv.Atoi(mustGetSpeed())
// ...
_, _, _ = item, speed, err
}
}
}

func BenchmarkClosure2(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, item := range items {
mustGetSpeed := func() string {
speed := sound
// ...
return speed
}
speed, err := strconv.Atoi(mustGetSpeed())
// ...
_, _, _ = item, speed, err
}
}
}

func BenchmarkClosure3(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, item := range items {
speed, err := strconv.Atoi(func() string {
speed := sound
// ...
return speed
}())
// ...
_, _, _ = item, speed, err
}
}
}

输出:

BenchmarkClosure1      10000        156031 ns/op
BenchmarkClosure2 10000 156955 ns/op
BenchmarkClosure3 10000 152546 ns/op

关于go - 将闭包声明为循环(在性能上下文中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31620132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com