将具有特定类型的变量分配给没有类型断言的接口值
当使用接受具有共享字段和方法的各种结构类型的接口时,执行重复的类型断言来访问特定属性可能会变得很麻烦。为了解决这个问题,我们探索替代解决方案并澄清 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中文网其他相关文章!