go的类型断言

0 简介

在 Go 中,一个接口(interface)是一组方法签名的集合。具体类型(struct 等)可以实现这些方法,从而满足接口的要求。通过这种方式,一个对象的类型可以被表示为一个或多个接口类型。

  1. 类型转换是基于接口实现的: 在进行类型转换时,被转换的对象必须是实现了目标类型所要求的接口的。如果对象并没有实现接口,转换将失败,并且在运行时会返回一个错误
  2. 类型转换必须是兼容的: 类型转换只能在源类型和目标类型之间存在相容关系时进行。即目标类型必须是源类型的一个接口,或者源类型可以直接转换为目标类型。
  3. 类型断言会返回两个值: 类型断言返回两个值,一个是实际转换后的值,另一个是指示转换是否成功的布尔值。

1 好处

众所周知,类型转换是很常见的东西。但是像C++、python,他们的类型转换,应该叫做强制转换,直接在类型上的转换。比如int -> floatfloat -> int,都是能成功的,但是float->int是直接截断数字的,所以就会有问题

对于Go语言,类型转换是基于接口的,只有当 目标类型 实现了 源类型 的所有方法签名,这样的转换才是安全的。

简单的例子: 如果类型 A 和类型 B 都实现了接口 I,那么你可以通过类型断言将类型 A 转换为类型 B。但如果类型 C 并不实现接口 I,那么将类型 A 转换为类型 C 是不合法的,会导致编译错误或运行时错误

posted @ 2023-08-26 00:25  wenli7363  阅读(46)  评论(0编辑  收藏  举报