1 回答

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)相同的錯誤。
- 1 回答
- 0 關(guān)注
- 267 瀏覽
添加回答
舉報