mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
57 lines
952 B
Markdown
57 lines
952 B
Markdown
# Do Something N Times
|
|
|
|
With Go 1.23 there is a new for-range syntax that makes looping a bit easier
|
|
and more compact.
|
|
|
|
Instead of needing to set up our 3-part for-loop syntax, we can say we want to
|
|
do something `N` times with `for range N`.
|
|
|
|
```go
|
|
for range n {
|
|
// do something
|
|
}
|
|
```
|
|
|
|
Let's look at an actual, runnable example:
|
|
|
|
```go
|
|
package main
|
|
|
|
import "fmt"
|
|
import "math/rand"
|
|
import "time"
|
|
|
|
func main() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
food := []string{"taco", "burrito", "torta", "enchilada", "tostada"}
|
|
|
|
for range 5 {
|
|
randomIndex := rand.Intn(len(food))
|
|
fmt.Println(food[randomIndex])
|
|
}
|
|
}
|
|
```
|
|
|
|
The output is random and might look something like this:
|
|
|
|
```bash
|
|
$ go run loop.go
|
|
taco
|
|
burrito
|
|
tostada
|
|
taco
|
|
enchilada
|
|
```
|
|
|
|
I appreciate this syntax addition because it feels very akin to Ruby's `#times`
|
|
method:
|
|
|
|
```ruby
|
|
5.times do
|
|
# do something
|
|
end
|
|
```
|
|
|
|
[source](https://eli.thegreenplace.net/2024/ranging-over-functions-in-go-123/)
|