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
寫乙個學生管理系統,學生類別有(小學生、中學生、大學生),既然是學生群體都可以(查詢成績、設定成績)
繼承給go程式帶來了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()
}
**的復用性
提高了,**的可維護性、擴充套件性更高了!
注意點:
如果乙個struct巢狀了另乙個匿名結構體,那麼這個結構可以直接訪問匿名結構體的方法,從而實現繼承
如果乙個struct巢狀了另乙個【有名】的結構體,那麼這個模式叫做組合
匿名欄位和內嵌結構體
結構體可以包含乙個或多個 匿名 或內嵌 字段,即這些字段沒有顯式的名字,只有欄位的型別是必須的,此時型別就是欄位的名字。匿名字段本身可以是乙個結構體型別,即 結構體可以包含內嵌結構體。可以粗略地將這個和物件導向語言中的繼承概念相比較,隨後將會看到它被用來模擬類似繼承的行為。go 語言中的繼承是通過內...
golang 方法及struct的匿名字段方法繼承
go方法 一般的函式定義叫做函式 定義在結構提上面的函式叫做該結構體的方法 package main import fmt type rect struct 這個area方法有乙個限定型別 rect 表示這個函式是定義在rect結構體上的方法 func r rect area int 方法的定義限定...
Go 04 匿名變數(沒有名字的變數)
在編碼過程中,可能會遇到沒有名稱的變數 型別或方法。雖然這不是必須的,但有時候這樣做可以極大地增強 的靈活性,這些變數被統稱為匿名變數。匿名變數的特點是乙個下畫線 本身就是乙個特殊的識別符號,被稱為空白識別符號。它可以像其他識別符號那樣用於變數的宣告或賦值 任何型別都可以賦值給它 但任何賦給這個識別...