結構體用來定義複雜的資料結構,儲存許多相同的欄位屬性
1、結構體的定義以及簡單實用
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{} 同上
透過以下方式取得儲存的值
##2、struct中的「建構子」,稱之為工廠模式,請參閱程式碼# ①s1.name
②s1.name或(*s1).name
③同上
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) }
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) }
1、在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() }
2、結構體繼承結構體,其中被繼承結構體的方法全部為繼承結構體吸收
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() }
更多相關知識請關注
go語言教學以上是go語言中的結構體與方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!