????????在 Go 語言中,結構體(struct)是一種用戶自定義的數據類型,它可以包含多種不同類型的數據組合在一起。結構體為組織和管理相關數據提供了一種有效的方式,常用于表示現實世界中的對象或概念。如果你懂C/C++,那么這個數據結構理解起來挺容易的,只是形式上略有不同。
結構體定義
type <結構體名>?struct {
? ? ? ? ?<成員1> <類型1>
? ? ? ? ?<成員2> <類型2>
? ? ? ? ?<成員3> <類型3>
? ? ? ? ...
}
type
?關鍵字:表示定義了一個新類型。- struct 關鍵字:表示新的類型是一個結構體類型
- 結構體可以包含多個成員,每個成員的類型可以相同也可以不同
- 成員命名也區分大小寫,大駝峰命名外部包是否可以被引用
- 結構體可以有自己的成員函數(這里后續再補充)
- 成員函數也是要有大小寫的命名,大駝峰命名外部包可以引用
- 作為函數形式參數的時候,通常是傳遞指針類型,因為結構體的內容可能會很大
- 另外,指針類型可以直接修改原始數據,把修改的結果帶回來,所以使用的時候也要注意
- 還有一種特殊的用法,匿名結構
- 指針變量與普通變量在訪問結構體成員的時候都使用 . 的方式訪問 (與C語言不一樣)
- 結構體支持嵌套使用,最常見的例子就是解析配置 JSON 和 Yaml 內容的時候
結構體的使用
package mainimport "fmt"type Student struct {NumID int // 學號Name string // 姓名ClassID string // 班級Birthday string // 生日Age int // 年齡Sex string // 性別IsAccommodation bool // 是否住校 true 住校 false 不住
}func (s *Student)StudentInfoPrint() {fmt.Println("學號 :", s.NumID)fmt.Println("姓名 :", s.Name)fmt.Println("班級 :", s.ClassID)fmt.Println("生日 :", s.Birthday)fmt.Println("年齡 :", s.Age)fmt.Println("性別 :", s.Sex)fmt.Println("是否住校 :", s.IsAccommodation)
}func main() {stu1 := Student {1, "張三", "一年級", "2020-01-12", 6, "男", true}fmt.Println("===== stu1 =====")stu1.StudentInfoPrint()var stu2 Studentfmt.Println("===== stu2 =====")stu2.StudentInfoPrint()stu3 := &Student{}stu3.Name = "李四"fmt.Println("===== stu3 =====")stu3.StudentInfoPrint()stu4 := &Student{NumID: 4,Name: "王五",ClassID: "二年級",Birthday: "2018-03-12",Age: 7,Sex: "男",}fmt.Println("===== stu4 =====")stu4.StudentInfoPrint()stu5 := new(Student)stu5.NumID = 5stu5.Name = "朱六"stu5.Sex = "女"fmt.Println("===== stu5 =====")stu5.StudentInfoPrint()fmt.Println("匿名結果體使用")stu6 := struct {name stringage int}stu6.name = "劉七"stu6.age = 10fmt.Println("===== stu6 =====")fmt.Println("name : ", stu6.name)fmt.Println("age : ", stu6.age)
}