跨套件實作具有未匯出方法的介面
您嘗試透過不匯出介面的方法來限制對介面實作細節的存取。雖然這是一種有效的方法,但在單獨的套件中實作介面時可能會帶來挑戰。
問題
編譯器會引發錯誤,因為它無法存取未匯出的accountingsystem.Adapter 的getInvoice 方法。這是由於 Go 語言的可見性規則導致套件無法在其自身範圍之外使用未導出的標識符。
可能的解決方案
不幸的是,沒有直接的方法在另一個套件中實現具有未導出方法的介面。但是,還有其他方法可以實現類似的結果。
使用匿名結構欄位
您可以將介面作為匿名欄位嵌入單獨套件中的結構中。雖然這允許結構體滿足接口,但也使得您無法定義自己的未導出方法的實現。
註冊適配器
更合適的方法是使適配器類型不導出,並在適配器包中提供一個函數,將其註冊到主包中。這允許您控制對適配器的訪問,同時仍然保持靈活性。
透過使用此方法,您可以限制對適配器實現的訪問,同時確保介面可以跨包使用。
以上是如何在不同的 Go 套件中實作未匯出方法的介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!