go类型断言基本使用

向右看齐 2021-07-24 20:19 620阅读 0赞

一 问题引出

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5ncWl1bWluZw_size_16_color_FFFFFF_t_70

二 基本介绍

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

1 代码

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type Point struct {
  6. x int
  7. y int
  8. }
  9. func main() {
  10. var a interface{}
  11. var point Point = Point{1, 2}
  12. a = point // oK
  13. // 如何将 a 赋给一个 Point 变量?
  14. var b Point
  15. // b = a 不可以
  16. // b = a.(Point) // 可以
  17. b = a.(Point)
  18. fmt.Println(b)
  19. // 类型断言
  20. var x1 interface{}
  21. var b4 float32 = 1.1
  22. x1 = b4 // 空接口,可以接收任意类型
  23. // x => float32 [使用类型断言]
  24. y := x1.(float32)
  25. fmt.Printf("y 的类型是 %T 值是=%v", y, y)
  26. // 类型断言(带检测的)
  27. var x interface{}
  28. var b2 float32 = 2.1
  29. x = b2 // 空接口,可以接收任意类型
  30. // x=>float32 [使用类型断言]
  31. // 类型断言(带检测的)
  32. if y, ok := x.(float32); ok {
  33. fmt.Println("convert success")
  34. fmt.Printf("y 的类型是 %T 值是=%v", y, y)
  35. } else {
  36. fmt.Println("convert fail")
  37. }
  38. fmt.Println("继续执行...")
  39. }

2 测试

{1 2}

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

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

3 说明

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

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

发表评论

表情:
评论列表 (有 0 条评论,620人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go——基本数据类型

    基本数据类型 G0是一种强类型的静态编译语言,类型是高级语言的基础,有了类型,高级语言才能对不同类型抽象出不同的运算,编程者才能在更高的抽象层次上操纵数据,而不用关注具体

    相关 go语言基本数据类型

    Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。