在使用go的使用,经常有个困惑,go的强类型太蛋疼了,干什么事都要指定下变量类型。比如我的需求很
简单,就是想创建一个函数,这个函数里面可以传递一个参数,这个参数可以是任何类型的,然后在这个
函数中来处理这个接收的参数,比如最简单的打印一下。这要怎么做呢?
想一下:给这个参数定义成string类型,貌似不行,因为int类型的参数不满足。因此肯定不能是一个
固定的类型,那要怎么做呢?
其实interface此时就派上了用场。
```go
package main
import "fmt"
//注意go中,其实可以把interface{}当作是一个类型。类似的有 struct{}这个也是个类型而已。
func printVar(v interface{}) {
fmt.Println(v)
}
func main() {
printVar("hello world")
printVar(false)
printVar(20200716)
printVar([]int{1, 2, 3})
// 上面都是打印很简单的数据类型,我们打印个map试下
var m map[int]string
m[9] = "the 9th day"
// printVar(m) //此时会报错,原因是map不能直接这样打印,但是为什么不能这样打印呢?
```
不能直接打印一个map,但是为什么不能这样打印呢?
* 不是 fmt.Println(v) 报错,是你的 `m[9] = "the 9th day"` 这里报错了, 在这之前m 一致都是 `nil`, 怎么能赋值呢?
* 在赋值之前加上初始化 `m = make(map[int]string)` 再试试看吧
#1
更多评论