我有一个简单的函数,它接受一个变量获取它的类型并将其处理到一个开关中,但是我得到一个错误:
i is not a type
我的代码如下所示:

var whatAmI = func(i, interface{}) { // error is here
    switch t := i.(type) {
    case bool:
        fmt.Println("I'm a bool!")
    case int:
        fmt.Println("I'm an int!")
    default:
        fmt.Println("Don't know type %T\n", t)
    }
}
whatAmI(true)
whatAmI(1)
whatAmI("hey")

我在这里误解了什么吗?

最佳答案

从函数签名中删除逗号,它将起作用。试试吧 here

package main

import (
    "fmt"
)

func main() {
    var whatAmI = func(i interface{}) { // error is here
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool!")
        case int:
            fmt.Println("I'm an int!")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")

}

此外,您错误地格式化了 default case 打印语句,因此我对其进行了更改以符合您的预期行为。

10-08 14:58