在Go 中,嵌入多個具有相同名稱的結構體可能會帶來挑戰,可能會導致重複字段錯誤。本文探討了這種情況的解決方案,使您能夠有效地嵌入結構而不會發生此類衝突。
問題陳述
考慮以下程式碼片段:
<code class="go">type datastore struct { *sql.Store *file.Store }</code>
此程式碼嘗試在資料儲存結構中嵌入兩個具有相同名稱Store 的結構*sql.Store 和*file.Store。但是,它會導致重複欄位錯誤,因為編譯器無法區分兩個嵌入欄位。
解決方案
要解決此問題,您可以使用嵌入結構之一的類型別名。這會為引用的類型建立一個替代名稱,允許它與其他結構一起嵌入,而不會導致任何命名衝突。
<code class="go">type SqlStore = sql.Store // this is a type alias type datastore struct { *SqlStore *file.Store }</code>
在這種情況下,SqlStore 成為 sql.Store 的別名,引入了新的同一類型的名稱。因此,當在資料儲存中嵌入 SqlStore 和 file.Store 時,它們被識別為不同的字段,從而消除了重複字段錯誤。
使用類型別名的好處
透過使用類型別名,您可以:
替代方法
或者,如果不需要嵌入具有相同名稱的結構體,您可以考慮以下選項:
以上是如何在 Go 中嵌入多個具有相同名稱的結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!