1 回答

TA貢獻1843條經驗 獲得超7個贊
您正在打印切片的類型,而不是元素的類型。切片的類型是[]interface{}. 這就是為什么你會看到。
如果要查看元素的動態類型(它們的靜態類型始終為interface{}),則打印元素的類型:
fmt.Printf("Expected element type: %T, got: %T", expected[0], actual[0])
這將輸出:
Expected element type: int, got: float64
筆記:
上面的代碼假設您將 2 個切片與 1 個元素進行比較。如果不想檢查切片長度,而想處理任意長度的切片,則可以使用其他動詞。例如,您可以使用%t需要bool值并希望打印的動詞true或false。請注意,這只是一個實現決定,并不能保證,但%t例如使用將打印所有切片元素;bool如果是 type 則打印相應的值,如果不是 typebool則打印元素的動態類型和值bool。
例子:
data := []interface{}{1, float64(2), "3", time.Now()}
fmt.Printf("%t", data)
輸出:
[%!t(int=1) %!t(float64=2) %!t(string=3)
{%!t(int64=63393490800) %!t(int32=0) %!t(*time.Location=&{ [] [] 0 0 <nil>})}]
它有點難看,但包含許多有用的信息(例如類型、值)。
- 1 回答
- 0 關注
- 834 瀏覽
添加回答
舉報