👋

Golang クイズ

2022/12/18に公開

クイズ1

以下の出力を答えてください

package main

import "fmt"

type Student struct {
	Name string
}

func main() {

	arr := []*Student{
		{
			Name: "student1",
		},
		{
			Name: "student2",
		},
		{
			Name: "student3",
		},
	}

	brr := append(arr, &Student{
		Name: "student4",
	})

	crr := append(arr, &Student{
		Name: "student5",
	})

	for _, v := range brr {
		fmt.Println(v)
	}

	fmt.Println("-----------")

	for _, v := range crr {
		fmt.Println(v)
	}
}

予想通りに

&{student1}
&{student2}
&{student3}
&{student4}
-----------
&{student1}
&{student2}
&{student3}
&{student5}

クイズ2

以下の出力を答えてください

package main

import "fmt"

type Student struct {
	Name string
}

func main() {

	arr := []*Student{}

	arr = append(arr, &Student{
		Name: "student1",
	})

	arr = append(arr, &Student{
		Name: "student2",
	})

	arr = append(arr, &Student{
		Name: "student3",
	})

	brr := append(arr, &Student{
		Name: "student4",
	})

	crr := append(arr, &Student{
		Name: "student5",
	})

	for _, v := range brr {
		fmt.Println(v)
	}

	fmt.Println("-----------")

	for _, v := range crr {
		fmt.Println(v)
	}
}

以下の結果になります

&{student1}
&{student2}
&{student3}
&{student5}
-----------
&{student1}
&{student2}
&{student3}
&{student5}

まとめ

なぜ、クイズ2はクイズ1のような結果が出されていないでしょうか
このクイズ1はunderlying配列の拡張方の理解を問われてます。

クイズ1の場合、スライスarr1のlen=3,cap=3
クイズ2の場合、スライスarr1のlen=3,cap=4

Discussion