📌
Golang 構造体
構造体の宣言
type Student struct {
ID int
FirstName string
LastName string
}
変数の宣言
var Ryo Student
変数宣言と同時に初期化
student := Student{1001, "Ryo", "Sato"}
フィールドを明示的にすることも可能。
全てのフィールドを指定しなくてもいい
student := Student{LastName: "Sato", FirstName: "Ryo"}
フィールドへのアクセス
student.ID = 1001
fmt.Println(student.FirstName)
構造体ポインタの作成
student := Student{LastName: "Sato", FirstName: "Ryo"}
fmt.Println(student)
studentCopy := &student
studentCopy.FirstName = "Taro"
fmt.Println(student)
実行
{0 Ryo Sato}
{0 Taro Sato}
ポインタを使えば構造体の中身を変更できる
構造体の埋め込み
構造体に別の構造体を埋め込む
type Person struct {
ID int
FirstName string
LastName string
}
type Student struct {
Person
Score int
}
func main() {
student := Student{
Person: Person{
FirstName: "Ryo",
},
}
student.LastName = "Sato"
fmt.Println(student.FirstName)
}
すべてのフィールドが自動的に埋め込まれるので、Student構造体からPersonのフィールドに直接アクセスできている
構造体をJSONで扱う
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
ID int
FirstName string `json:"name"`
LastName string
}
type Student struct {
Person
Score int
}
func main() {
students := []Student{
Student{
Person: Person{
LastName: "Sato", FirstName: "Ryo",
},
},
}
data, _ := json.Marshal(students)
fmt.Printf("%s\n", data)
var decoded []Student
json.Unmarshal(data, &decoded)
fmt.Printf("%v", decoded)
}
実行
[{"ID":0,"name":"Ryo","LastName":"Sato","Score":0}]
[{{0 Ryo Sato } 0}]
JSONの出力結果ではキーFirstNamedが指定したnameに変わっている
Discussion