泛型結構中類型相容的賦值
在 Go 中,泛型類型允許建立具有變數類型欄位的結構。但是,為欄位指派文字值有時會導致「IncompleteAssign」錯誤。
考慮以下程式碼:
type constraint interface { ~float32 | ~float64 } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
此程式碼可以編譯,因為其約束介面僅包含浮點類型。但是,如果我們將整數類型加到限制中:
type constraint interface { ~float32 | ~float64 | ~int } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
我們會遇到「IncompleteAssign」錯誤,因為無類型浮點常數無法直接指派給整數類型的欄位。
錯誤原因
出現錯誤的原因是約束允許具有不同類型組的多種類型。當將文字值指派給泛型類型的欄位時,編譯器無法在編譯時確定該欄位的確切類型。分配無類型浮點常數可能會導致將不相容的類型分配給整數類型的字段,從而導致錯誤。
解決方案
要解決這個錯誤,我們有幾個選項:
結論
透過了解「IncompleteAssign」錯誤背後的原因,我們可以採取適當的解決方案來確保通用結構體欄位的類型相容性。
以上是在 Go 中為通用結構體欄位賦值時如何避免「IncompleteAssign」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!