今天小编给大家分享一下go语言如何进行强制类型转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
go语言中的强制类型转换有三种语法形式:1、类型断言,语法“value, ok := x.(需要转换的类型)”;2、使用“type (a)”形式进行的类型转换,语法“类型B的值 = 类型B(类型A的值)”;3、指针类型转换,语法“(*指针类型)(unsafe.Pointer(值))”。
golang是强类型语言,有强制类型转换,但是不同于Java语言所使用的强制类型转换。
golang强制类型转换
golang语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。
1、类型断言
类型断言(Type Assertion)是一个使用在接口值上的操作,用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。
语法格式如下:
value, ok := x.(T)
其中,x 表示一个接口的类型,T 表示一个具体的类型(也可为接口类型)。
示例:
package mainimport "fmt"func main() { var a interface{} =10 t,ok:= a.(int) if ok{ fmt.Println("int",t) } t2,ok:= a.(float32) if ok{ fmt.Println("float32",t2) }}
打印结果是:int 10因为 golang 自动推断 a 是 int 类型。(这个更像是Java的强制类型转换,认为变量 a 是 int 类型,就强转为 int 类型来使用)
2、类型转换
package mainimport "fmt"func main() { var a float32 = 5.6 var b int = 10 fmt.Println (a * float32(b))}
代码段中的 float32(b) 就是第二种强制类型转换, 普通变量类型int,float,string 都可以使用 type (a)这种形式来进行强制类型转换,比如
var a int32 = 10var b int64 = int64(a)var c float32 = 12.3var d float64 =float64(c)
这种类型转换形式更像是Java的通过构造类的构造方法创建一个新类型对象。在Java语法中不属于强制类型转换。
3、指针类型转换
package mainfunc main() { var a int = 10 var p *int =&a var c *int64 c= (*int64)(p)}
这样的代码是错误的,编译器会提示cannot convert p (type *int) to type *int64
指针的强制类型转换需要用到unsafe包中的函数实现
package mainimport "unsafe"import "fmt"func main() { var a int =10 var b *int =&a var c *int64 = (*int64)(unsafe.Pointer(b)) fmt.Println(*c)}
以上就是“go语言如何进行强制类型转换”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。