struct

定義與宣告

  • 可以使用var宣告指針用法,但初始化是nil,注意直接使用會引發panic

  • 使用&XXX{}或是new(XXX)可以宣告指針且初始化,可以直接使用

  • 使用XXX{}返或一般var struct回的是一个struct類型的值,而不是指针

*使用new(T) 會自動用 zeroed value 來初始化型別且拿到回傳指標

type Person struct {
	Name string
}

func main() {
	var user1 *Person
	user2 := &Person{}
	user3 := new(Person)
	var user4 Person
	user5 := Person{}

	fmt.Printf("%v \n", user1) // nil
	// fmt.Printf("%v name=%s\n", user1,user1.Name)
	//panic: runtime error: invalid memory address or nil pointer dereference
	fmt.Printf("%v name=%s\n", user2, user2.Name) // &{},user2.Name 會是 ""
	fmt.Printf("%v name=%s\n", user3, user3.Name) // &{},user3.Name 會是 ""
	fmt.Printf("%v name=%s\n", user4, user4.Name) // {} user4.Name 會是 ""
	fmt.Printf("%v name=%s\n", user5, user5.Name) // {} user5.Name 會是 ""
	

匿名的 struct(anonymous struct)

匿名欄位(Anonymous fields)宣告法

在 struct 中不一定要替欄位建立名稱,可以直接使用 data types, Go 會使用當作欄位名稱

巢狀結構體 nested struct

function type

Last updated