加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Go语言的强制类型转换是怎样进行的?

发布时间:2023-07-07 14:55:08 所属栏目:语言 来源:
导读:给大家分享一下go语言如何进行强制类型转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
给大家分享一下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 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 类型来使用)
 
2、类型转换
 
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语法中不属于强制类型转换。
 
3、指针类型转换
 
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)
 
}
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!