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

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

等效結構上字段的接口轉換

等效結構上字段的接口轉換

Go
蠱毒傳說 2023-06-19 17:09:18
有沒有一種直接的方法可以將某些字段為“通用”( interface{}) 的結構轉換為具有相同字段名稱但“強類型”( , 等) 的另一種int類型string?可以這么說,給定定義:package mainimport (    "fmt")type GenericData struct {    Hard int    Soft interface{}}type Data struct {    Hard int    Soft int}type GenericDataGenerator func() GenericDatafunc generateGenericData() interface{} {    return GenericData{1, 2}}func returnsGenericDataGenerator() interface{} {    return generateGenericData}GenericData從到轉換是否Data需要顯式轉換所有interface{}字段?有沒有更直接的方法來做到這一點?func main() {    gd := generateGenericData()    fmt.Println(gd)    fmt.Println(gd.(GenericData))    // Doesn't work, but is straightforward    // fmt.Println(gd.(Data))    // Works, but is not straight forward    fmt.Println(Data{gd.(GenericData).Hard, gd.(GenericData).Soft.(int)})    genDataGenerator := returnsGenericDataGenerator()    // Doesn't work, but is straightforward    //genDataGenerator.(GenericDataGenerator)()    // Works, but is not straight forward    resp := genDataGenerator.(func() interface{})()    fmt.Println(resp.(GenericData))}代碼可以執行在: https ://play.golang.org/p/_UVBi5It1FY
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

有沒有一種直接的方法可以將某些字段是“通用”(interface{})的結構轉換為另一種具有相同字段名稱但“強類型”(int、string 等)的類型?

不。

一旦你明白這interface{}不是某種“通用”或“任意”類型,而是一種單一的“強類型”類型,就像stringor一樣,這就很明顯了int32??战涌?code>interface{}是一個完全正常的類型,就像 auint16或 amap[float32]bool一樣。它是一種接口類型(與數字類型和映射類型的其他示例相反)并且它的方法集是空集。它與任何其他類型一樣嚴格或強類型。

您可以將任何值分配給類型變量的事實interface{}并不意味著interface{}以某種方式表示“任何類型”。您可以將值3,-1234435948(僅舉幾例)分配給 a int32。這是允許的,因為 a 的允許值范圍int32包含這些值(3、-1234、435948)。您可以將類型的值分配func(int) string給類型的變量interface{},因為允許的值范圍interface{}包含func(int)string。這是一個空洞的事實,而不是一個“通用”的事實。


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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