2023.08.01  

【Go】mapに格納した構造体を書き換えたい

Go    

次のような顧客情報を持った構造体を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}
    }
}

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信