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

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

如何讓多個接口引用同一個值?

如何讓多個接口引用同一個值?

Go
烙印99 2023-02-14 15:36:56
我想讓兩個接口引用相同的值(意味著如果你更新一個,另一個將更新為相同的東西):package mainimport (    "fmt"    "reflect")func main(){    var a, b any    a = "Hi"    b = reflect.ValueOf(&a).Elem()    a = reflect.ValueOf(&b).Elem()    b = "Howdy"    fmt.Println(a)    fmt.Println(b)}打印日志HowdyHowdy游樂場: https://go.dev/play/p/qizVO42UaUja這段代碼按預期工作,除了和b不是接口這一事實。所以當我將它們轉換為這樣的接口時......package mainimport (    "fmt"    "reflect")func main(){    var a, b any    a = "Hi"    b = reflect.ValueOf(&a).Elem().Interface()    a = reflect.ValueOf(&b).Elem().Interface()    b = "Howdy"    fmt.Println(a)    fmt.Println(b)}打印日志HiHowdy游樂場: https://go.dev/play/p/jCpuepBJYdD...代碼不再按預期工作。有沒有辦法在保持兩個接口引用相同值的同時使用接口數據類型而不是 reflect.Value 數據類型?
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

簡單的解決方案

想通了——不需要使用反射。在接口中存儲值的地址將允許您通過對接口指針使用類型斷言和取消引用來完成此操作:


package main


import "fmt"


func main() {

    var object any

    object = "Hi"


    var a, b any

    a = &object

    b = &object


    *a.(*any) = "Howdy"


    fmt.Println(*a.(*any))

    fmt.Println(*b.(*any))

}

打印日志


Howdy

Howdy

游樂場: https://go.dev/play/p/LEx8MR4ZK06


使用多個函數

如果您想抽象掉類型斷言和取消引用:


package main


import "fmt"


func getStuff(a any) any {

    return *a.(*any)

}


func setStuff(a, to any) {

    *a.(*any) = to

}


func main() {

    var object any

    object = "Hi"


    var a, b any

    a = &object

    b = &object


    setStuff(a, "Howdy")


    fmt.Println(getStuff(a))

    fmt.Println(getStuff(b))

}

打印日志


Howdy

Howdy

游樂場: https://go.dev/play/p/RUX4cu2Cx2o


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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