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

architagr

Archit Agarwal

Posted on November 13, 2024

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! πŸ™Œ

πŸ’– πŸ’ͺ πŸ™… 🚩
architagr
Archit Agarwal

Posted on November 13, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related