• 技术文章 >后端开发 >Golang

    go语言怎么进行强制类型转换

    青灯夜游青灯夜游2023-01-07 14:05:47原创111

    go语言中的强制类型转换有三种语法形式:1、类型断言,语法“value, ok := x.(需要转换的类型)”;2、使用“type (a)”形式进行的类型转换,语法“类型B的值 = 类型B(类型A的值)”;3、指针类型转换,语法“(*指针类型)(unsafe.Pointer(值))”。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    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)
    }

    总结

    golang中的强制类型转换有三种语法形式,分别是 类型断言类型转换指针类型转换,语法上类型断言指针类型转换和Java比较像。

    golang和Java的强制类型转换可以对比着理解,但是不同语言设计思想不同,不能硬类比。

    【相关推荐:Go视频教程编程教学

    以上就是go语言怎么进行强制类型转换的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:go语言 Golang
    上一篇:go语言的beego是什么 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • golang中除法运算符有哪些• golang怎么检测变量是否为字符串• go语言只能开发服务端吗• golang是否有抽象类• go语言是动态语言吗• Go语言中类型与接口有什么关系
    1/1

    PHP中文网