不要过度使用any类型
在Go语言中,具有零个方法的接口类型称为空接口(interface {}). 从Go1.18版本开始,出现了一个新的关键字 any, 它是 interface{} 的别名。因此,所有 interface{} 出现的地方都可以替换为 any. 然而,在很多情况下,any被认为是过度概括。本文将讨论过度使用any存在的问题。
像下面的代码,any 类型的变量可以保存任何类型的值。
func main() {
var i any
i = 42
i = "foo"
i = struct {
s string
}{
s: "bar",
}
i = f
_ = i
}
func f() {}
将任何类型的值赋值给 any 类型时,会丢失原来的类型信息, 这时需要类型断言才能从变量 i 中获取任何有用的信息。下面来看一个使用 any 不准确的具体例子,例子中将定义一个 Store 结构体 并且 它拥有 Get和Set 两个方法。用 Store 结构体存储 Customer 和 Contract 两种类型的对象,具体代码如下:
package store
type Customer struct{
// Some fields
}
type Contract struct{
// Some fields
}
type Store struct{}
func (s *Store) Get(id string) (any, error) {
// ...
}
func (s *Store) Set(id string, v any) error {
// ...
}
尽

最低0.47元/天 解锁文章
4145

被折叠的 条评论
为什么被折叠?



