首頁 > 後端開發 > Golang > Go中的嵌入方法可以存取父字段嗎?

Go中的嵌入方法可以存取父字段嗎?

Mary-Kate Olsen
發布: 2024-12-06 06:06:14
原創
740 人瀏覽過

Can Embedded Methods in Go Access Parent Fields?

在 Go 中從嵌入式方法存取父欄位:可行嗎?

在 Go 中,嵌入式方法允許將類型嵌入到其他類型中,從而使得程式碼重用並提供更簡單的介面。然而,一個常見的問題是:嵌入方法可以存取父類型的欄位嗎?

背景:

Go 的嵌入機制利用組合來擴展類型的功能,而無需遺產。當嵌入類型時,其欄位和方法將成為嵌入類型的一部分。

目標:

此問題的目的涉及建立 Active Record 樣式 ORM對於Go,方法嵌入在用戶結構中以抽像出數據存儲

示例:

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    // How to access "Name" field from this embedded method?
}
登入後複製

問題:

有沒有辦法製作頂級欄位(父字段)可透過嵌入方法(如s.Name 或call)存取s.Method()?

答案:

Go 本身不支援從嵌入方法存取父欄位。嵌入方法的接收者嚴格綁定到嵌入類型,在本例中為 *Bar。因此,直接存取父字段是不可能的。

替代方法:

  • 基於介面的解決方案:新增介面{}欄位到嵌入類型,需要包含類型來實現此接口。此方法提供對父類型的訪問,但可能會增加額外的複雜性。
  • 修改的 API 結構: 考慮將 API 建構為 db.Save(user) 而非 user.Save()。這種方法符合 Go 對函數呼叫的慣用用法,並且可以優雅地處理多個資料庫。

以上是Go中的嵌入方法可以存取父字段嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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