DEV Community

Archit Agarwal
Archit Agarwal

Posted on

Know How Elements Are Referenced in Range Loops to Avoid Common Pitfalls in Go

Hey Dev.to community! πŸ‘‹

If you've ever worked with range loops in Golang, you might have encountered some subtle yet frustrating bugs. These often arise from how elements are referenced within the loop. As Go developers, understanding this behaviour is crucial for writing clean, bug-free code.

In my latest article, I dive into:

  • How range loops handle element referencing behind the scenes.
  • The common mistakes developers make (like unintended modifications).
  • Practical tips and code examples to avoid these pitfalls.

Here’s a sneak peek at one common issue:

func getAvatarUrl(characterId int) string{
    // Simulate getting URL
    return fmt.Sprintf("https://base-url/%d", characterId)
}
type CharacterInfo struct {
    id          int
    characterName string
    avatarUrl   string
}
charactersOfGOT := []CharacterInfo{
    {id: 1, characterName: "Jon Snow"},
    {id: 2, characterName: "Daenerys Targaryen"},
    {id: 3, characterName: "Arya Stark"},
    {id: 4, characterName: "Tyrion Lannister"},
}

for _, charInfo := range charactersOfGOT {
    charInfo.avatarUrl = getAvatarUrl(charInfo.id)
}

for _, charInfo := range charactersOfGOT {
    fmt.Printf("Id: %d Name: %s, avatar: %s\n", charInfo.id, charInfo.characterName, charInfo.avatarUrl)
}
Enter fullscreen mode Exit fullscreen mode

Why doesn’t this output what you expect? πŸ˜… If you've faced a similar challenge, this article will help you understand why!

πŸ‘‰ Read the full article here to learn how to avoid these traps and become a pro at handling range loops in Go.

I'd love to hear your thoughts and experiences with Go's range loops. Have you run into any weird behaviour, or do you have tips to share? Let’s discuss this in the comments! πŸ™Œ

Top comments (0)