序
本文主要研究一下golang的类型断言
类型断言
1 | r复制代码x.(T) |
- 断言x不为nil且x为T类型
- 如果T不是接口类型,则该断言x为T类型
- 如果T类接口类型,则该断言x实现了T接口
实例1
1 | go复制代码func main() { |
直接赋值的方式,如果断言为true则返回该类型的值,如果断言为false则产生runtime panic;j这里赋值直接panic
输出
1 | go复制代码int |
不过一般为了避免panic,通过使用ok的方式
1 | go复制代码func main() { |
switch type
另外一种就是variable.(type)配合switch进行类型判断
1 | go复制代码func main() { |
判断struct是否实现某个接口
1 | go复制代码type shape interface { |
输出
1 | rust复制代码cannot use rectangle literal (type rectangle) as type shape in assignment: |
小结
x.(T)
可以在运行时判断x是否为T类型,如果直接使用赋值,当不是T类型时则会产生runtime panic- 使用
var _ someInterface = someStruct{}
可以在编译时期校验某个struct或者其指针类型是否实现了某个接口
doc
本文转载自: 掘金