登录/注册

类型转换

Golang中的类型转换分为:类型转换(type conversion)类型断言(type assertion)*和*指针类型转换

类型断言

类型断言就是讲接口类型的值(X),转换为类型(T)。

x.(T)
v:=x.(T)
v,ok:=x.(T)

类型断言的必要条件是,被断言者必须是接口类型,否则不能做类型断言:

var i int=10
v:=i.(int) //错误 i不是接口类型

类型断言如果非法,运行时就会出现错误,为了避免这种错误,可以使用一下语法:

v,ok := x.(T)

ok代表类型断言是否合法,如果非法,ok则为false,这样就不会出现panic

类型切换

类型切换用来比较类型,而不是对值进行比较:

switch i := x.(type) {
case nil:
  printString("x is nil") // i的类型是 x的类型 (interface{})
case int:
  printInt(i) // i的类型 int
case float64:
  printFloat64(i) // i的类型是 float64
case func(int) float64:
  printFunction(i) // i的类型是 func(int) float64
case bool, string:
  printString("type is bool or string") // i的类型是 x (interface{})
default:
  printString("don't know the type") // i的类型是 x的类型 (interface{})
}

类型转换

普通变量类型int,float,string 都可以使用 type (a)这种形式来进行强制类型转换,比如:

package main

import "fmt"

func main() {
   var a float32 = 5.6
   var b int = 10
   var c float32 = 12.3
   var d float64 = float64(c)
   fmt.Println (a * float32(b))
}

指针类型转换

指针的强制类型转换需要用到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)
}
本文章由 https://itdashu.com 原创发布,欢迎转载,转载请注明出处。
投稿或联系站长请发送邮件至 leno@itdashu.com。

抢沙发

我们不是孤独的个体,留下足迹,保持联系,成为团体...
姓名
电子邮件
个人主页
Golang教程