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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

指向接口的指針不是接口錯(cuò)誤?

指向接口的指針不是接口錯(cuò)誤?

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}由于錯(cuò)誤:不能使用&s(* Square類(lèi)型)作為* Brace賦值:* Brace是指向接口的指針,而不是接口
查看完整描述

1 回答

?
www說(shuō)

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

如錯(cuò)誤所示:


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


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


如果要傳遞結(jié)構(gòu)的地址。接口可以將指針包裝為struct。無(wú)需創(chuàng)建指向接口的指針即可實(shí)現(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)

}

操場(chǎng)上的例子


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


編譯器會(huì)抱怨該錯(cuò)誤,但情況仍然令人困惑,因?yàn)橛袝r(shí)需要一個(gè)指針來(lái)滿足接口。洞察力是,盡管指向具體類(lèi)型的指針可以滿足接口,但有一個(gè)例外,指向接口的指針永遠(yuǎn)不能滿足接口。


考慮變量聲明,


var w io.Writer

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


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

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


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

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


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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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