配列
package main
import (
"fmt"
)
func main() {
// 配列: 最初に宣言した要素数から変更はできない
aDocs := [3]string{"shiba", "bulldog", "toy poodle"}
fmt.Println(aDocs[0]) // 出力: shiba
// for文との組み合わせも可能
for _, doc := range sDocs {
fmt.Println(doc)
}
// 配列や構造体は値そのものを保持しているので、そのデータのアドレスを渡すときには、このようにアンパサンドが必要
updateDocsArray(&aDocs)
fmt.Println(aDocs) // 出力: [mameShiba bulldog toy poodle]
}
func updateDocsArray(aDocs *[3]string) {
aDocs[0] = "mameShiba"
}
スライス
package main
import (
"fmt"
)
func main() {
// スライス: 宣言後でも要素数を増減できる
sDocs := []string{"shiba", "bulldog", "toy poodle"}
sDocs = append(sDocs, "chihuahua")
fmt.Println(len(sDocs)) // 出力4
// スライスはその変数自体がアドレスを保持するポインタなので、こちらにアンパサンドは不要
updateDocsSlice(sDocs)
fmt.Println(sDocs) // 出力: [shiroMameShiba bulldog toy poodle chihuahua]
}
func updateDocsSlice(sDocs []string) {
sDocs[0] = "shiroMameShiba"
}
マップ
package main
import (
"fmt"
)
func main() {
// マップ
dogWeights := map[string]int{
"shiba": 10,
"bulldog": 12,
}
for doc, weight := range dogWeights {
fmt.Println(fmt.Sprintf("%sの体重は%dです", doc, weight))
// 出力
// shibaの体重は10です
// bulldogの体重は12です
}
// マップはその変数自体がアドレスを保持するポインタなので、こちらにアンパサンドは不要
updateDocsMap(dogWeights)
fmt.Println(dogWeights) // 出力: map[bulldog:12 shiba:15]
}
func updateDocsMap(dogWeights map[string]int) {
dogWeights["shiba"] = 15
}