golang语言强制类型转换

Jacinthe ·
更新时间:2024-11-01
· 582 次阅读

文章目录前言golang强制类型转换类型断言类型转换指针类型转换总结引用 前言

golang是强类型语言,有强制类型转换,但是不同于Java语言所使用的强制类型转换。

golang强制类型转换

golang语言中分为类型转换(type conversion)类型断言(type assertion)指针类型转换

类型断言 package main import "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 类型来使用) 类型转换 package main import "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 = 10 var b int64 = int64(a) var c float32 = 12.3 var d float64 =float64(c)

这种类型转换形式更像是Java的通过构造类的构造方法创建一个新类型对象。在Java语法中不属于强制类型转换。

指针类型转换 package main func 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 main import "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的强制类型转换可以对比着理解,但是不同语言设计思想不同,不能硬类比。

引用 https://studygolang.com/articles/21591?fr=sidebar https://blog.csdn.net/github_37459410/article/details/81141339
作者:pdskyzcc1



golang语言 强制类型转换 类型转换 golang

需要 登录 后方可回复, 如果你还没有账号请 注册新账号