[2在不使用嵌入結構的情況下繼承類型方法的另一種方法。但是,它需要對GO的類型系統有更深入的了解。
嵌入structs 在GO中,嵌入struct允許您訪問嵌入式struct的字段和方法好像它們是包含結構的一部分。這是一個功能強大的功能,可用於在類型之間創建繼承。
嵌入struct時,嵌入式結構的方法集不是自動晉升為包含結構。為了促進方法,嵌入式結構必須是匿名的。 方法pasterion
方法促銷是一種語言功能,允許從匿名嵌入式結構中訪問來自匿名嵌入的struct的方法它們是包含結構的方法。這是通過遵循以下規則來實現的:
接口{} func(p props)getstring(鍵字符串)字符串{ 返回p [鍵]。 (字符串) } 類型節點struct { 道具 } func main(){ 節點:= node {“ test”:“ foo”} fmt.println(node.getString(“ test”))//輸出:foo }
在此示例中,節點struct嵌入了類型props的匿名結構。 This allows the GetString method from Props to be promoted to Node.
Alternative ApproachAn alternative approach without embedding is to use a pointer receiver.通過將指針傳遞給接收器函數,您可以訪問基礎結構的字段和方法,而無需嵌入。 使用指針接收器: type props map [string] interface {} func(p *props)getstring(鍵字符串)字符串{ 返回p [鍵]。 (字符串) } 類型節點struct { 道具 } func main(){ 節點:=&node {props {“ test”:“ foo”}} fmt.println(node.getString(“ test”))//輸出:foo }
在此示例中,我們為getString方法使用指針接收器。這使我們能夠訪問基礎道具結構的字段和方法,而無需嵌入它。結論[&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&華並不總是最好的選擇。如果不需要或不需要方法促銷,則使用指針接收器可以提供更靈活,更性能的替代方案。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3