6 2 Go 匿名字段

2022-05-15 14:39:56 字數 1454 閱讀 2342

golang匿名字段:可以像訪問字段成員那樣,訪問匿名字段方法,go編譯器自動查詢。

package main

import "fmt"

type student struct

type teacher struct

func (s1 *student) play()

func main() }

//兩種方式一樣效果

/*t1 := &teacher,}*/

//通過t1變數,執行結構體student的方法,查詢

t1.play() // t1 -> teacher -> *student

}

通過匿名字段可以實現

重寫 override

寫乙個學生管理系統,學生類別有(小學生、中學生、大學生),既然是學生群體都可以(查詢成績、設定成績)

package main

import "fmt"

//學生結構體

type student struct

//顯示學生個人資訊方法,接收指標型別

func (stu *student) showinfo()

//設定學生成績

func (stu *student) setscore(score int)

//小學生群體 單詞pupil

type pupil struct

//小學生獨有方法

func (p *pupil) testing()

//大學生結構體,同樣的也有學生的常見屬性

type graduate struct

//大學生獨有的方法

func (g *graduate) testing()

func main() }

p1.testing()

p1.showinfo()

p1.setscore(100)

p1.showinfo()

fmt.println("-----------")

g1 := &graduate}

g1.testing()

g1.showinfo()

g1.setscore(60)

g1.showinfo()

}

繼承給go程式帶來了**的復用性提高了,**的可維護性、擴充套件性更高了!

注意點:

如果乙個struct巢狀了另乙個匿名結構體,那麼這個結構可以直接訪問匿名結構體的方法,從而實現繼承

如果乙個struct巢狀了另乙個【有名】的結構體,那麼這個模式叫做組合

匿名欄位和內嵌結構體

結構體可以包含乙個或多個 匿名 或內嵌 字段,即這些字段沒有顯式的名字,只有欄位的型別是必須的,此時型別就是欄位的名字。匿名字段本身可以是乙個結構體型別,即 結構體可以包含內嵌結構體。可以粗略地將這個和物件導向語言中的繼承概念相比較,隨後將會看到它被用來模擬類似繼承的行為。go 語言中的繼承是通過內...

golang 方法及struct的匿名字段方法繼承

go方法 一般的函式定義叫做函式 定義在結構提上面的函式叫做該結構體的方法 package main import fmt type rect struct 這個area方法有乙個限定型別 rect 表示這個函式是定義在rect結構體上的方法 func r rect area int 方法的定義限定...

Go 04 匿名變數(沒有名字的變數)

在編碼過程中,可能會遇到沒有名稱的變數 型別或方法。雖然這不是必須的,但有時候這樣做可以極大地增強 的靈活性,這些變數被統稱為匿名變數。匿名變數的特點是乙個下畫線 本身就是乙個特殊的識別符號,被稱為空白識別符號。它可以像其他識別符號那樣用於變數的宣告或賦值 任何型別都可以賦值給它 但任何賦給這個識別...