將具有特定類型的變數分配給沒有類型斷言的介面值
當使用接受具有共享欄位和方法的各種結構類型的介面時,執行重複的類型斷言來存取特定屬性可能會變得很麻煩。為了解決這個問題,我們探索替代解決方案並澄清 Go 靜態類型系統所施加的限制。
Go 的靜態型別和缺乏泛型
與動態型別語言不同,Go是靜態型別的,要求在編譯時知道變數的型別。 Go 目前迭代中缺乏泛型進一步限制了創建任意類型變數的能力。
替代方法
範例
// Define an interface with common fields and methods type Data interface { GetParam() int SetParam(param int) String() string } // Define concrete struct types type Struct1 struct { Param int } func (s *Struct1) GetParam() int { return s.Param } func (s *Struct1) SetParam(param int) { s.Param = param } func (s *Struct1) String() string { return "Struct1: " + strconv.Itoa(s.Param) } type Struct2 struct { Param float64 } func (s *Struct2) GetParam() float64 { return s.Param } func (s *Struct2) SetParam(param float64) { s.Param = param } func (s *Struct2) String() string { return "Struct2: " + strconv.FormatFloat(s.Param, 'f', -1, 64) } // Function to process data that implements the Data interface func method(data Data) { // No need for type assertions or switches data.SetParam(15) fmt.Println(data.String()) }
以上是Go中如何在沒有類型斷言的情況下將特定類型的變數指派給介面值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!