4.9 go空接口及断言

package main

import "fmt"

/**
   01
  空接口不包含任何方法,正因为如此所有的类型都实现了空接口
  因此空接口可以存储任意类型的数值
  var v1 interface{}=1
  var v2 interface{}="abc"
  var v3 interface{}=&v2

**/

type Student struct {
	name string
	age  int
}

func main() {

	var v4 interface{} = struct{ x int }{1}
	fmt.Println("v4=", v4)

	//02空接口的应用 func Printlf(fmt string, args...interface{})
	//          func Println(args...interface{})

	//03判断空接口参数
	i := make([]interface{}, 3)
	i[0] = 1
	i[1] = "hi"
	i[2] = Student{"huahu", 33}
	//类型查询,类型断言;确定类型后才能给其他变量赋值,不能强转!!!
	for index, data := range i {
		if value, ok := data.(int); ok == true {
			fmt.Printf("x[%d]类型为int,内容为%d\n", index, value)
		} else if value, ok := data.(string); ok == true {
			fmt.Printf("x[%d]类型为string,内容为%s\n", index, value)
		} else if value, ok := data.(Student); ok == true {
			fmt.Printf("x[%d],内容为%v\n", index, value)
		}

	}
	for index, data := range i {
		switch value := data.(type) {
		case int:
			fmt.Printf("x[%d]类型为int,内容为%d\n", index, value)
		case string:
			fmt.Printf("x[%d]类型为string,内容为%s\n", index, value)
		case Student:
			fmt.Printf("x[%d],内容为%v\n", index, value)
		}

	}

}
发布了124 篇原创文章 · 获赞 94 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105318270
4.9