golang语言强制类型转换

前言

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

golang强制类型转换

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

  1. 类型断言

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 类型来使用)
  1. 类型转换

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语法中不属于强制类型转换。

  1. 指针类型转换

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

引用

  1. https://studygolang.com/articles/21591?fr=sidebar
  2. https://blog.csdn.net/github_37459410/article/details/81141339
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值