Skip to content

Instantly share code, notes, and snippets.

@krittawatcode
Created December 11, 2020 07:12
Show Gist options
  • Select an option

  • Save krittawatcode/4166d7f6d7706f3e2dc76e77c6494340 to your computer and use it in GitHub Desktop.

Select an option

Save krittawatcode/4166d7f6d7706f3e2dc76e77c6494340 to your computer and use it in GitHub Desktop.
main with fixed func
package main
import "fmt"
// Soldier use for all case here
type Soldier struct {
name string
corrupt bool
}
func buggyLoop(soldiers []Soldier) {
soldierPtrs := []*Soldier{}
for _, soldier := range soldiers {
fmt.Printf("Soldier with name: <%s> and pointer: <%p>\n", soldier.name, &soldier)
soldierPtrs = append(soldierPtrs, &soldier)
}
// range in array of pointer -> value here is a pointer
for _, solsoldierPtr := range soldierPtrs {
fmt.Printf("soldier <%s> with corruption: <%v> and pointer: <%p>\n", solsoldierPtr.name, solsoldierPtr.corrupt, solsoldierPtr)
}
}
func fixedLoop(soldiers []Soldier) {
soldierPtrs := []*Soldier{}
for _, soldier := range soldiers {
soldier := soldier // declare local temporary variables. -> new temporary addr in memory
fmt.Printf("Soldier with name: <%s> and pointer: <%p>\n", soldier.name, &soldier)
soldierPtrs = append(soldierPtrs, &soldier)
}
// range in array of pointer -> value here is a pointer
for _, solsoldierPtr := range soldierPtrs {
fmt.Printf("soldier <%s> with corruption: <%v> and pointer: <%p>\n", solsoldierPtr.name, solsoldierPtr.corrupt, solsoldierPtr)
}
}
func main() {
soldiers := []Soldier{
{
name: "Too",
corrupt: true,
},
{
name: "Pawit",
corrupt: true,
},
{
name: "Tone",
corrupt: false,
},
}
fmt.Println("----- buggyLoop ------")
buggyLoop(soldiers)
fmt.Println("----- fixedLoop ------")
fixedLoop(soldiers)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment