亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中打印數組項的類型?

如何在 Go 中打印數組項的類型?

Go
慕斯709654 2021-11-08 16:09:27
當我嘗試對一些代碼進行單元測試時,我有一些這樣的斷言:expected := []interface{}{1}actual := []interface{}{float64(1)}if !reflect.DeepEqual(expected, actual); {    t.Errorf("Expected <%T> %#v to equal <%T> %#v", actual, actual, expected, expected);}并得到這個輸出:Expected <[]interface {}> []interface {}{1} to equal <[]interface {}> []interface {}{1}如何打印此消息以更明確?
查看完整描述

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>})}]

它有點難看,但包含許多有用的信息(例如類型、值)。


查看完整回答
反對 回復 2021-11-08
  • 1 回答
  • 0 關注
  • 834 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號