Go语言必知必会100问题-08 不要过度使用any类型

不要过度使用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 {
        // ...
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值