100-go-mistakes/4-control-structures/30-range-loop-element-copied/value-copy/main.go
2021-12-27 15:56:17 +01:00

64 lines
1.1 KiB
Go

package main
import (
"fmt"
"strings"
)
type account struct {
balance float32
}
func main() {
accounts := createAccounts()
for _, a := range accounts {
a.balance += 1000
}
fmt.Println(accounts)
accounts = createAccounts()
for i := range accounts {
accounts[i].balance += 1000
}
fmt.Println(accounts)
accounts = createAccounts()
for i := 0; i < len(accounts); i++ {
accounts[i].balance += 1000
}
fmt.Println(accounts)
accountsPtr := createAccountsPtr()
for _, a := range accountsPtr {
a.balance += 1000
}
printAccountsPtr(accountsPtr)
}
func createAccounts() []account {
return []account{
{balance: 100.},
{balance: 200.},
{balance: 300.},
}
}
func createAccountsPtr() []*account {
return []*account{
{balance: 100.},
{balance: 200.},
{balance: 300.},
}
}
func printAccountsPtr(accounts []*account) {
sb := strings.Builder{}
sb.WriteString("[")
s := make([]string, len(accounts))
for i, account := range accounts {
s[i] = fmt.Sprintf("{%.0f}", account.balance)
}
sb.WriteString(strings.Join(s, " "))
sb.WriteString("]")
fmt.Println(sb.String())
}