您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)golang中結(jié)構(gòu)體和方法的應(yīng)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
結(jié)構(gòu)體用來(lái)定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)很多相同的字段屬性
1、結(jié)構(gòu)體的定義以及簡(jiǎn)單使用
package main import ( "fmt" ) func main() { type Student struct { //定義結(jié)構(gòu)體 name string age int } s1 := new(Student) // 定義指向結(jié)構(gòu)體的指針 s1.name = "xiaomu" s1.age = 10 fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age) }
結(jié)構(gòu)體定義的三種方式,例如上面的Student類型,有如下方式定義
①var s1 Student 在內(nèi)存中直接定義一個(gè)結(jié)構(gòu)體變量
②s1 := new(Student) 在內(nèi)存中定義一個(gè)指向結(jié)構(gòu)體的指針
③s1 := &Student{} 同上
通過(guò)以下方式獲取存儲(chǔ)的值
①s1.name
②s1.name或者(*s1).name
③同上
2、struct中的“構(gòu)造函數(shù)”,稱之為工廠模式,見(jiàn)代碼
package main import ( "fmt" ) type Student struct { //聲明結(jié)構(gòu)體 Name string Age int } func NewStudent(name string, age int) *Student { // 返回值指向Student結(jié)構(gòu)體的指針 return &Student{ Name: name, Age: age, } } func main() { s1 := NewStudent("xiaomu", 123) // 聲明并且賦值指向Student結(jié)構(gòu)體的指針 fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age) }
3、特意聲明注意事項(xiàng)!??!
結(jié)構(gòu)體是值類型,需要使用new分配內(nèi)存
4、匿名字段,直接看下面代碼
package main import ( "fmt" ) func main() { type Class struct { ClassName string } type Student struct { //定義結(jié)構(gòu)體 name string age int Class // 定義匿名字段,繼承了該結(jié)構(gòu)體的所有字段 } s1 := new(Student) // 定義指向結(jié)構(gòu)體的指針 s1.ClassName = "xiaomu" fmt.Printf("ClassName:%s\n", s1.ClassName) }
struct的方法
1、在struct中定義方法并且使用
package main import ( "fmt" ) type Student struct { //定義結(jié)構(gòu)體 name string age int } func (stu *Student) OutName() { // 定義Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定義指向結(jié)構(gòu)體的指針 s1.name = "xaiomu" s1.OutName() }
2、結(jié)構(gòu)體繼承結(jié)構(gòu)體,其中被繼承結(jié)構(gòu)體的方法全部為繼承結(jié)構(gòu)體吸收
package main import ( "fmt" ) type ClassName struct { className string } func (cla *ClassName) OutClassName() { fmt.Println(cla.className) } type Student struct { //定義結(jié)構(gòu)體 name string age int ClassName // 繼承ClassName結(jié)構(gòu)體的所有 } func (stu *Student) OutName() { // 定義Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定義指向結(jié)構(gòu)體的指針 s1.className = "xiaomu" s1.OutClassName() }
看完上述內(nèi)容,你們對(duì)golang中結(jié)構(gòu)體和方法的應(yīng)用有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。