結構體用來定義複雜的數據結構,存儲不少相同的字段屬性python
一、結構體的定義以及簡單實用數據結構
package main import ( "fmt" ) func main() { type Student struct { //定義結構體 name string age int } s1 := new(Student) // 定義指向結構體的指針 s1.name = "xiaomu" s1.age = 10 fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age) }
結構體定義的三種方式,例如上面的Student類型,有以下方式定義函數
①var s1 Student 在內存中直接定義一個結構體變量 ②s1 := new(Student) 在內存中定義一個指向結構體的指針 ③s1 := &Student{} 同上
經過如下方式獲取存儲的值spa
①s1.name ②s1.name或者(*s1).name ③同上
二、struct中的「構造函數」,稱之爲工廠模式,見代碼指針
package main import ( "fmt" ) type Student struct { //聲明結構體 Name string Age int } func NewStudent(name string, age int) *Student { // 返回值指向Student結構體的指針 return &Student{ Name: name, Age: age, } } func main() { s1 := NewStudent("xiaomu", 123) // 聲明而且賦值指向Student結構體的指針 fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age) }
三、特地聲明注意事項!!!code
結構體是值類型,須要使用new分配內存blog
四、匿名字段,直接看下面代碼繼承
package main import ( "fmt" ) func main() { type Class struct { ClassName string } type Student struct { //定義結構體 name string age int Class // 定義匿名字段,繼承了該結構體的全部字段 } s1 := new(Student) // 定義指向結構體的指針 s1.ClassName = "xiaomu" fmt.Printf("ClassName:%s\n", s1.ClassName) }
一、在struct中定義方法而且使用內存
package main import ( "fmt" ) type Student struct { //定義結構體 name string age int } func (stu *Student) OutName() { // 定義Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定義指向結構體的指針 s1.name = "xaiomu" s1.OutName() }
二、結構體繼承結構體,其中被繼承結構體的方法所有爲繼承結構體吸取(吸星大法)string
package main import ( "fmt" ) type ClassName struct { className string } func (cla *ClassName) OutClassName() { fmt.Println(cla.className) } type Student struct { //定義結構體 name string age int ClassName // 繼承ClassName結構體的全部 } func (stu *Student) OutName() { // 定義Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定義指向結構體的指針 s1.className = "xiaomu" s1.OutClassName() }