Top Page

read

Structure

Structure(簡稱 Struct)在 Go 能讓使用者透過集合不同資料打包成一個自行定義型別,而透過自定義型別生出來的資料,在物件導向的概念就可以被稱作實體,甚至可以把它想像成是一個無法繼承的類別。

struct 起手式:

type Cat struct {
	name string
	age  int
}

一個 struct 可能會有零到多個欄位,每個欄位都會對應一個資料型態。 如果 struct 有多個型別相同的欄位,可以合併為一條:

type Cat struct {
	name, breed string
	age         int
}

而要使用 struct 的方式,與宣告變數的方式一樣,並且有幾種的賦值方式:

01.key-value (最推薦)
map 類似,一個欄位對應一個值。

type Cat struct {
	name, breed string
	age         int
}

cat := Cat{name: "BuiBui", breed: "Mix", age: 5}
fmt.Println(cat)

02.依照欄位順序決定

type Cat struct {
	name, breed string
	age         int
}

cat := Cat{"BuiBui", "Mix", 5}
fmt.Println(cat)

03.直接取得 struct 的 pointer

type Cat struct {
	name, breed string
	age         int
}

cat := &Cat{"BuiBui", "Mix", 5}
fmt.Println(cat)

登愣,狀況題來了! 請問 struct 內欄位的型別可以用 struct 嗎?

當然可以!基本上 struct 內要放什麼資料型別都是沒問題的, 來看看巢狀的 struct 該怎麼應用吧:

package main

import "fmt"

type Cat struct {
	name, breed string
	age         int
	owner       Ower
}

type Ower struct {
	name, gender string
	age          int
}

func main() {
	cat := Cat{
		name:  "BuiBui",
		breed: "Mix",
		age:   5,
		owner: Ower{
			name:   "Chan",
			gender: "female",
			age:    18}}
	fmt.Println(cat
}

只要在 ower 欄位以 Type{key: value} 形式書寫就行了,是不是超簡單呢!

匿名 Struct

雖然欄位配型別看起來很舒服,但其實 Go 也支援只提供型別,不寫欄位的方式。

package main

import "fmt"

type Cat struct {
	string
	int
	Ower
}

type Ower struct {
	string
	int
}

func main() {
	cat := Cat{"BuiBui", 5, Ower{"Chan", 18}}
	fmt.Println(cat)
}

結尾

struct 的文章就到今天結束,有任何問題都歡迎與我告知 :)

Blog Logo

yuchan


Published