Go语言类型转换和类型断言
Go语言的类型转换和类型断言:
- 类型转换在编译期完成,包括强制转换和隐式转换
- 类型断言在运行时确定,包括安全类型断言和非安全类型断言
Go语言要求不同类型之间必须做显式的类型转换。但似乎涉及到接口类型时,就会有所不同。
//两种类型断言
//不安全的类型断言,如果系统检测到不匹配,会在运行时调用内置的panic,抛出异常
s := "abc"
i := s.(int)
//安全的类型断言。 其中ok为一个bool值, 表征类型转换是否成功; s为返回的int变量,如果失败返回该类型的零值
i, ok := s.(int)
1. 类型之间转换
下面是部分例子:
*Point(p) // same as *(Point(p))
(*Point)(p) // p is converted to *Point
<-chan int(c) // same as <-(chan int(c))
(<-chan int)(c) // c is converted to <-chan int
func()(x) // function signature func() x
(func())(x) // x is converted to func()
(func() int)(x) // x is converted to func() int
func() int(x) // x is converted to func() int (unambiguous)
如果不确定符号的优先级,可以用括号来约束。
2. 接口之间的转换
接口之间在编译期间可以确定的情况下可以使用隐式