次のような顧客情報を持った構造体をmapに格納します。
その際ID:2のjiroの年齢を変更したい!
といった場合の方法についてメモ書きします。
package main
import "fmt"
type Customer struct {
ID string
Name string
Age string
}
type Customers map[string]Customer
func main() {
// 構造体に値を設定
cusomers := createCustomers()
// 構造体の中身を確認
checkCustomers(cusomers)
}
// 構造体に値を設定
func createCustomers() *Customers {
customers := Customers{}
customers["1"] = Customer{ID: "1", Name: "taro", Age: "30"}
customers["2"] = Customer{ID: "2", Name: "jiro", Age: "25"}
customers["3"] = Customer{ID: "3", Name: "saburo", Age: "25"}
customers["4"] = Customer{ID: "4", Name: "siro", Age: "25"}
customers["5"] = Customer{ID: "5", Name: "goro", Age: "20"}
return &customers
}
// 構造体の中身を確認
func checkCustomers(customers *Customers) {
for k, v := range *customers {
fmt.Printf("customers %v %v\n", k, v)
// 出力結果
// customers 1 {1 taro 30}
// customers 2 {2 jiro 25}
// customers 3 {3 saburo 25}
// customers 4 {4 siro 25}
// customers 5 {5 goro 20}
}
}
構造体の書き換え
ID:2のjiroのAgeを28
に変更します。
その際はmainに(*customers)["2"] = Customer{ID: "2", Name: "jiro", Age: "28"}
を追加します。
構造体の一部のみを書き換えることはできないようなので、新たに構造体を定義してcustomersのKeyの2に格納しています。
package main
import "fmt"
type Customer struct {
ID string
Name string
Age string
}
type Customers map[string]Customer
func main() {
// 構造体に値を設定
customers := createCustomers()
// Keyが2のjiroの年齢を28に変更
(*customers)["2"] = Customer{ID: "2", Name: "jiro", Age: "28"}
// 構造体の中身を確認
checkCustomers(customers)
}
// 構造体に値を設定
func createCustomers() *Customers {
customers := Customers{}
customers["1"] = Customer{ID: "1", Name: "taro", Age: "30"}
customers["2"] = Customer{ID: "2", Name: "jiro", Age: "25"}
customers["3"] = Customer{ID: "3", Name: "saburo", Age: "25"}
customers["4"] = Customer{ID: "4", Name: "siro", Age: "25"}
customers["5"] = Customer{ID: "5", Name: "goro", Age: "20"}
return &customers
}
// 構造体の中身を確認
func checkCustomers(customers *Customers) {
for k, v := range *customers {
fmt.Printf("customers %v %v\n", k, v)
// 出力結果
// customers 1 {1 taro 30}
// customers 2 {2 jiro 28}
// customers 3 {3 saburo 25}
// customers 4 {4 siro 25}
// customers 5 {5 goro 20}
}
}
構造体内の全てのAgeの書き換え
for k, v := range *customer
のように書くと全てのcustomer情報を書き換えられます。(mainのところ)
下記の例ではユーザーの全ての年齢を0に変更しています。
package main
import "fmt"
type Customer struct {
ID string
Name string
Age string
}
type Customers map[string]Customer
func main() {
// 構造体に値を設定
customers := createCustomers()
// 全てのユーザーの年齢を0にする
for k, v := range *customers {
// k = customersのKey、v = Customer
v.Age = "0"
(*customers)[k] = v
}
// 構造体の中身を確認
checkCustomers(customers)
}
// 構造体に値を設定
func createCustomers() *Customers {
customers := Customers{}
customers["1"] = Customer{ID: "1", Name: "taro", Age: "30"}
customers["2"] = Customer{ID: "2", Name: "jiro", Age: "25"}
customers["3"] = Customer{ID: "3", Name: "saburo", Age: "25"}
customers["4"] = Customer{ID: "4", Name: "siro", Age: "25"}
customers["5"] = Customer{ID: "5", Name: "goro", Age: "20"}
return &customers
}
// 構造体の中身を確認
func checkCustomers(customers *Customers) {
for k, v := range *customers {
fmt.Printf("customers %v %v\n", k, v)
// 出力結果
// customers 1 {1 taro 0}
// customers 2 {2 jiro 0}
// customers 3 {3 saburo 0}
// customers 4 {4 siro 0}
// customers 5 {5 goro 0}
}
}