检查接口对象的数据类型

在线运行open in new window启动 AI 助手open in new window

func checkType(v interface{}) {
	switch t := v.(type) {
	case int:
		fmt.Printf("int: %v\n", t)
	case string:
		fmt.Printf("string: %v\n", t)
	default:
		fmt.Printf("unkown\n")
	}
}

func main() {
	checkType(100)           // int: 100
	checkType("hello world") // string: hello world
	checkType(true)          // unkown
}

在程序中,首先定义了一个名为 checkType 的函数,该函数接受一个 interface{} 类型的参数 v。在函数中,程序使用了 switch 语句对参数 v 的类型进行判断。如果参数 v 的类型是 int,程序输出一条消息,指示参数的类型为 int,并输出参数的值。如果参数 v 的类型是 string,程序输出一条消息,指示参数的类型为 string,并输出参数的值。如果参数 v 的类型不是 int 或 string,程序输出一条消息,指示参数的类型为 unknown。

在主函数中,程序分别调用了 checkType 函数,并向其传递了不同类型的参数。第一次调用 checkType 函数时,程序向其传递了一个整型数值 100。由于这个参数的类型是 int,因此程序会输出一条消息,指示参数的类型为 int,并输出参数的值。第二次调用 checkType 函数时,程序向其传递了一个字符串 "hello world"。由于这个参数的类型是 string,因此程序会输出一条消息,指示参数的类型为 string,并输出参数的值。第三次调用 checkType 函数时,程序向其传递了一个布尔型数值 true。由于这个参数的类型不是 int 或 string,因此程序会输出一条消息,指示参数的类型为 unknown。

检查结构体是值还是引用

在线运行open in new window启动 AI 助手open in new window

type person struct {
	name string
	age  int
}

func checkType(v interface{}) {
	switch t := v.(type) {
	case person:
		fmt.Printf("person value: %v\n", t)
	case *person:
		fmt.Printf("person reference: %v\n", t)
	default:
		fmt.Printf("unkonwn\n")
	}
}

func main() {
	p1 := person{"zhangsan", 20}
	p2 := &person{"zhangsan", 20}

	checkType(p1)         // person value: {zhangsan 20}
	checkType(p2)         // person reference: &{zhangsan 20}
	checkType(struct{}{}) // unkonwn
}

在程序中,首先定义了一个名为 person 的结构体,该结构体包含两个字段,分别是名字和年龄。然后,定义了一个名为 checkType 的函数,该函数接受一个 interface{} 类型的参数 v。在函数中,程序使用了 switch 语句对参数 v 的类型进行判断。如果参数 v 的类型是 person,程序输出一条消息,指示参数的类型为 person,并输出参数的值。如果参数 v 的类型是 *person,程序输出一条消息,指示参数的类型为 person reference,并输出参数的值的地址。如果参数 v 的类型不是 person 或 *person,程序输出一条消息,指示参数的类型为 unknown。

在主函数中,程序分别创建了一个 person 类型的变量 p1 和一个指向 person 类型变量的指针 p2。然后,程序分别调用了 checkType 函数,并向其传递了不同类型的参数。第一次调用 checkType 函数时,程序向其传递了变量 p1。由于这个参数的类型是 person,因此程序会输出一条消息,指示参数的类型为 person,并输出参数的值。第二次调用 checkType 函数时,程序向其传递了变量 p2。由于这个参数的类型是 *person,因此程序会输出一条消息,指示参数的类型为 person reference,并输出参数的值的地址。第三次调用 checkType 函数时,程序向其传递了一个空结构体类型的变量。由于这个参数的类型不是 person 或 *person,因此程序会输出一条消息,指示参数的类型为 unknown。

Last Updated:
Contributors: Bob Wang