本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。
(资料图)
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)}
登录后复制
总结
golang中的强制类型转换有三种语法形式,分别是 类型断言,类型转换,指针类型转换,语法上类型断言和指针类型转换和Java比较像。
golang和Java的强制类型转换可以对比着理解,但是不同语言设计思想不同,不能硬类比。
【相关推荐:Go视频教程、编程教学】
以上就是go语言怎么进行强制类型转换的详细内容,更多请关注php中文网其它相关文章!