【golang笔记】go_类型断言(18)

Page content

这一篇简单的整理了golang 类型断言 相关的内容。

1.类型断言基本用法

类型断言是由于一个接口是一般类型,不知道是具体类型的时候,就需要使用类型断言。

package main

import (
 "fmt"
)

func main() {
 //类型断言(带检测的)
 var a interface{}
 var b float32 = 2.1
 a = b //空接口,可以接收任意类型

 //类型断言(带检测的)
 if c, ok := a.(float32); ok {
  fmt.Println("convert success")
  fmt.Printf("c 的类型是 %T 值是=%v\n", c, c)
 } else {
  fmt.Println("convert fail")
 }
 fmt.Println("继续执行...")
}

2.类型断言 type 用法

可以接结合 switch 语句,在条件中使用.(type)获取数据类型。

package main
import (
 "fmt"
)

//定义Student类型
type Student struct {

}

//编写一个函数,可以判断输入的参数是什么类型
func TypeJudge(items... interface{}) {
 for index, x := range items {
  switch x.(type) {
   case bool :
    fmt.Printf("第%v个参数是 bool 类型,值是%v\n", index, x)
   case float32 :
    fmt.Printf("第%v个参数是 float32 类型,值是%v\n", index, x)
   case float64 :
    fmt.Printf("第%v个参数是 float64 类型,值是%v\n", index, x)
   case int, int32, int64 :
    fmt.Printf("第%v个参数是 整数 类型,值是%v\n", index, x)
   case string :
    fmt.Printf("第%v个参数是 string 类型,值是%v\n", index, x)
   case Student :
    fmt.Printf("第%v个参数是 Student 类型,值是%v\n", index, x)
   case *Student :
    fmt.Printf("第%v个参数是 *Student 类型,值是%v\n", index, x)
   default :
    fmt.Printf("第%v个参数是  类型 不确定,值是%v\n", index, x)
  }
 }
}

func main() {
 var n1 float32 = 1.1
 var n2 float64 = 2.3
 var n3 int32 = 30
 var name string = "tom"
 address := "北京"
 n4 := 300

 stu1 := Student{}
 stu2 := &Student{}

 TypeJudge(n1, n2, n3, name, address, n4, stu1, stu2)
}

欢迎大家的意见和交流

email: li_mingxie@163.com