GO类型转换及与C的类型转换
类型转换
语法
dst := float32(src)
示例
var num int = 520
f32 := float32(num)
i64 := int64(num)
注意:加入val
是一个指针,int32(val)
相当于*(int32(var1))
,指针不能直接转换成一个int32类型,应该改为(*int32)(var1)
,所以某些类型可能引起误会的应该用括号括起来转换。
类型断言
语法
dst,ok := src.(int) // 安全类型断言,通过ok判断是否转换成功
dst := src.(int) // 非安全类型断言,无法确定是否转换成功
示例
var val interface{
} = 123
num,ok := val.(int)
if ok {
fmt.Printf("%T->%d\n", num, num)
} else {
fmt.Println("类型不匹配")
}
其他转换
go提供了strconv
包来进行转换
bytes 、string转换
//类型转换 string to bytes
func str2bytes(s string) []byte {
x := (*[2]uintptr)(unsafe.Pointer(&s))
h := [3]uintptr{
x[0], x[1], x[1]}
return *(*[]byte)(unsafe.Pointer(&h))
}
//类型转换 bytes to string
func bytes2str(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}