第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

指向接口的指針不是接口錯誤?

指向接口的指針不是接口錯誤?

Go
犯罪嫌疑人X 2021-04-09 14:15:51
以下代碼有效:type Brace interface {}type Round struct {    prev_ Brace}type Square struct {}func main() {    var r Round    var s Square    r.prev_ = s}r.prev_現(xiàn)在是真的副本s嗎?如何更改Round包含指向Brace的指針?此代碼不起作用:type Brace interface {}type Round struct {    prev_ *Brace}type Square struct {}func main() {    var r Round    var s Square    r.prev_ = &s}由于錯誤:不能使用&s(* Square類型)作為* Brace賦值:* Brace是指向接口的指針,而不是接口
查看完整描述

1 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗 獲得超8個贊

如錯誤所示:


不能使用&s(* Square類型)作為* Brace賦值:* Brace是指向接口的指針,而不是接口


接口可以包裝任何類型的值。但是,您將結(jié)構(gòu)包裝在指針類型的接口而不是接口中。那不是接口在golang中的工作方式。


如果要傳遞結(jié)構(gòu)的地址。接口可以將指針包裝為struct。無需創(chuàng)建指向接口的指針即可實現(xiàn)此目的。


type Brace interface {}


type Round struct {

    prev_ Brace

}


type Square struct {}


func main() {

    var r Round

    var s Square

    r.prev_ = &s

    fmt.Printf("%#v", r)

}

操場上的例子


在Golang中,您應(yīng)該避免將接口的指針傳遞為:


編譯器會抱怨該錯誤,但情況仍然令人困惑,因為有時需要一個指針來滿足接口。洞察力是,盡管指向具體類型的指針可以滿足接口,但有一個例外,指向接口的指針永遠(yuǎn)不能滿足接口。


考慮變量聲明,


var w io.Writer

打印函數(shù)fmt.Fprintf將滿足io.Writer的值作為第一個參數(shù),該值實現(xiàn)了規(guī)范的Write方法。這樣我們可以寫


fmt.Fprintf(w, "hello, world\n")

但是,如果我們傳遞w的地址,則該程序?qū)o法編譯。


fmt.Fprintf(&w, "hello, world\n") // Compile-time error.

一個例外是,任何值,甚至是指向接口的指針,都可以分配給空接口類型(interface {})的變量。即使這樣,如果值是指向接口的指針,幾乎可以肯定是一個錯誤。結(jié)果可能會令人困惑。


在Go操場上檢查它。嘗試將指針傳遞給接口時,您會在代碼段中發(fā)現(xiàn)相同的錯誤。


查看完整回答
反對 回復(fù) 2021-04-19
  • 1 回答
  • 0 關(guān)注
  • 267 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號