2017-10-20 82 views
-2

我有一個簡單的函數,它接受一個變量獲得它的類型和交換機的方式處理它,但我得到一個錯誤:Golang錯誤我不是一個類型

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") 

我在這裏誤解了什麼嗎?

回答

6

從函數簽名中刪除逗號,它將起作用。試試吧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") 

} 

你也被錯誤格式化默認情況下打印語句,所以我改變它以符合您的預期行爲。

+1

哦,所以它說'我'是一個'界面',使現在更有意義:D – Sir

+0

你怎麼使用'reflect.TypeOf(t)'? – Sir

+0

@Sir通過這種方式,我們可以看到它是什麼類型。點擊我發佈的鏈接,用't'替換'reflect.TypeOf(t)',看看會發生什麼,如果我們不這樣做。 –

相關問題