遍历数组是编写简单循环的不好方法吗?

我有时厌倦了for i := 0; i < 7; i++ {为不需要循环迭代器的恒定数量的循环编写 ForClause循环。我有时希望我可以使用范围和整数,for range 7 {但这是无效的。我发现你可以使用for range [7]int{} {.

这似乎很好:

package kata

import (
    "runtime"
    "testing"
)

const times = 100_000

func BenchmarkLoop(b *testing.B) {
    b.Run("For", func(b *testing.B) {
        for j := 0; j < b.N; j++ {
            for i := 0; i < times; i++ {
                runtime.Gosched()
            }
        }
    })
    b.Run("Range", func(b *testing.B) {
        for j := 0; j < b.N; j++ {
            for range [times]int{} {
                runtime.Gosched()
            }
        }
    })
}
% go test -bench=. -benchmem
goos: darwin
goarch: amd64
pkg: github.com/brackendawson/kata
cpu: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
BenchmarkLoop/For-12                 157           8963540 ns/op               0 B/op          0 allocs/op
BenchmarkLoop/Range-12               162           7651102 ns/op               0 B/op          0 allocs/op
PASS
ok      github.com/brackendawson/kata    4.695s

这安全吗?我是否毫无意义地节省了 4 次击键?我觉得脏。

回答

虽然安全,但我认为这不是惯用的。在 Go 中,力求最简单的代码。原始for循环对读者来说更清晰,代码应该针对阅读进行优化,而不是为了保存击键(为了保存击键,请考虑配置您的编辑器/IDE?)

如果你坚持让它更短,至少使用类似https://pkg.go.dev/github.com/bradfitz/iter 的东西(或重新实现它 - 这很简单),以便能够编写:

for i := range iter.N(10) {
    // ....
}

这是短,比具有阵中还有明确的可读性,但我还是要说这是比香草可读for循环。


总而言之,不要:-)


以上是遍历数组是编写简单循环的不好方法吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>