关于 空接口的一些疑问

来源:12-4 package和init函数的关系

城中城

2022-05-13

重新回看了一遍 自己之前的笔记

看到switch 的功能
如下图
这样就判断出 x 是 一个参数为 i 返回值 为 float64 的函数
请问一下 那我如何 那着这个 x 去调用这个函数呢


func cheshi(i int) float64 {
	fmt.Println("11111111111")
	return float64(i)
}

func main() {
	var x interface{}
	x = cheshi
	
	switch i := x.(type) {
	case nil:
		fmt.Printf(" x 的类型 :%T", i)
	case int:
		fmt.Printf("x 是 int 型")
	case float64:
		fmt.Printf("x 是 float64 型")
	case func(int) float64:
		fmt.Printf("x 是 func(int) 型")
	case bool, string:
		fmt.Printf("x 是 bool 或 string 型")
	default:
		fmt.Printf("未知型")
	}
}
写回答

1回答

bobby

2022-05-14

interface无法直接调用,你想要当做函数一样调用,要断言为函数之后才能调用 比如 x.(func()error)() 这样就可以直接调用了

0
2
bobby
回复
城中城
也就是x是一个接口可以任何值给他,但是你使用的时候无法直接使用x.xx方法,因为interface没有这个方法,所以想要使用前先将x转换为你赋值的类型 才能调用,你这里的x是一个函数那么就就要将interface转换为函数才能当作函数一样使用
2022-05-17
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

508 学习 · 530 问题

查看课程