[2018-12-31 15:20:00 最后更新]
golang 断言与 C 语言中的强制类型转换
C 语言中的强制类型转换是在表达式前加类型,然后再加一个括号。 golang 中的强制转换则是将类型作为函数名使用,不过这种方法一经常无法转换 interface 这样的,而且也不安全。
所以在 golang 中有另外一个类型转换的方法叫断言,就是断言这个变量就是某个类型... 使用的方法倒也简单:按 C 语言的方式写好,然后将位置从变量名前面换到变量名后面就可以了...
等等,然后再在变量后再加个 "." 号,就好象它是变量的成员变量似的 ...
这种借用 C 语法加点变形的方法 golang 经常用,例如所谓切片(其实就是动态数组)的声明其实就是数组的声明,只是将数组长度去掉就是了,我是在那本很有名有 golang 书中看到的,原书
的说法是 "它看起来就象是没有长度的数组" 这一句话让我mao se 顿开 ...
另:用断言仍然会在失败时导致程序异常退出,所以在使用断言时还要加上判断。方法是在接收变量后加个 "," 号再加个 bool 变量就可以了。例如:
p,ok := a.(*dns.PTR);
if ok {
fmt.Printf("%v, %v\n", p.Ptr, ok);
result = append(result, p.Ptr);
}