go类型断言基本使用

一 问题引出

如何将一个接口变量,赋给自定义类型的变量?

二 基本介绍

类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言。

1 代码

package main

import (
   "fmt"
)

type Point struct {
   x int
   y int
}

func main() {
   var a interface{}
   var point Point = Point{1, 2}
   a = point // oK
   // 如何将 a 赋给一个 Point 变量?
   var b Point
   // b = a 不可以
   // b = a.(Point) // 可以
   b = a.(Point)
   fmt.Println(b) 

   // 类型断言
   var x1 interface{}
   var b4 float32 = 1.1
   x1 = b4 // 空接口,可以接收任意类型
   // x => float32 [使用类型断言]
   y := x1.(float32)
   fmt.Printf("y 的类型是 %T 值是=%v", y, y)

   // 类型断言(带检测的)
   var x interface{}
   var b2 float32 = 2.1
   x = b2 // 空接口,可以接收任意类型
   // x=>float32 [使用类型断言]
   // 类型断言(带检测的)
   if y, ok := x.(float32); ok {
      fmt.Println("convert success")
      fmt.Printf("y 的类型是 %T 值是=%v", y, y)
   } else {
      fmt.Println("convert fail")
   }
   fmt.Println("继续执行...")
}

2 测试

{1 2}

y 的类型是 float32 值是=1.1convert success

y 的类型是 float32 值是=2.1继续执行...

3 说明

在进行类型断言时,如果类型不匹配,就会报 panic, 因此进行类型断言时,要确保原来的空接口指向的就是断言的类型。

类型断言需要带上检测机制,如果成功就 ok ,否则也不要报 panic。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值