在 Go 中實作抽象類別
Go 由於注重安全性和簡單性,本身並不支援抽象類別。但是,有一些解決方法可以模擬抽象行為。
原始問題
該問題討論了 Go 介面中無法實現預設實現的問題。由於 Go 中的介面不能包含字段,因此實現具有預設行為的無狀態物件具有挑戰性。
使用抽象守護程序的解決方法
提供的解決方案採用了一個抽象守護程序來服務作為介面和具體實現之間的中介。
type AbstractDaemon struct { Daemon }
抽象守護程式透過其接收介面結構守護程式欄位。這允許在抽象守護進程中定義預設行為。
func (a *AbstractDaemon) start(duration time.Duration) { // Default implementation for start }
具體實作
具體實作嵌入抽象守護程式並定義自己的 doWork 方法:
type ConcreteDaemonA struct { *AbstractDaemon foo int } func (a *ConcreteDaemonA) doWork() { // Custom implementation for ConcreteDaemonA }
實例化和用法
具體實作可以實例化並用作介面類型:
var dA Daemon = newConcreteDaemonA() dA.start(1 * time.Second)
評估
此解決方法提供了一種方法透過將預設行為與介面解耦並在單獨的抽象結構中定義它們來實現Go 中的抽象類別。這是 Go 中常用的方法,儘管存在語言限制,但仍可實現抽象行為。
以上是如何在 Go 中模擬抽象類別行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!