首頁 > 後端開發 > Golang > 不同套件中未匯出的方法可以實作Go介面嗎?

不同套件中未匯出的方法可以實作Go介面嗎?

Susan Sarandon
發布: 2024-12-10 06:18:10
原創
161 人瀏覽過

Can Go Interfaces Be Implemented with Unexported Methods in Different Packages?

在Go 中使用未導出方法實現接口

考慮一種情況,您希望定義一個用於會計系統訪問的接口,同時隱藏特定的實作細節。您打算使介面方法不導出,並在基礎包中提供導出函數,以從本機適配器呼叫相同的函數。但是,由於方法的未導出實現,編譯器會引發錯誤。

在不同的套件中實作具有未導出方法的介面是否可行?

答案:

一種潛在的解決方案是利用匿名結構fields:

type Adapter struct {
    accounting.IAdapter
}
登入後複製

但是,必須注意的是,此方法不允許提供您自己的未匯出方法的實作。換句話說,您不能覆寫 Adapter 中 IAdapter.getInvoice() 的實作。

替代方法:

如果從其他包中隱藏accountingsystem.Adapter類型是如果需要,請取消匯出類型並建立一個用於向記帳註冊適配器的函數package:

package accounting

type IAdapter interface {
    GetInvoice() error
}

---

package accountingsystem

type adapter struct {}

func (a adapter) GetInvoice() error {return nil}  

func SetupAdapter() {
    accounting.SetAdapter(adapter{})
}

---

package main

func main() {
    accountingsystem.SetupAdapter()
}
登入後複製

此方法透過將未匯出的適配器類型包裝在會計包中來解決該問題,從而有效地限制其對其他包的存取。

以上是不同套件中未匯出的方法可以實作Go介面嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板