3 回答

TA貢獻1848條經(jīng)驗 獲得超2個贊
Go 是否試圖阻止我將接口指針傳遞給函數(shù)?
是的。
在(幾乎*)所有情況下,接口指針都是錯誤的。
(* 在非常罕見和微妙的情況下,指針到接口是有意義的,但很有可能您每 5 年不會看到它們超過一次。)
(挑剔:該語言稱為“Go”?!癵olang.org”是網(wǎng)站。類似的基礎知識包含在兼容性承諾中,并且不依賴于版本:Go 1.0、1.12 和 1.16 在這方面的行為完全相同.)

TA貢獻1775條經(jīng)驗 獲得超8個贊
它與類型系統(tǒng)的工作方式有關。接口類型I定義了方法集。方法集是為 type 定義的I,而不是為 type 定義的*I。正因為如此,其使用*I受到限制。當函數(shù)要設置接口值時可以使用它,但很少見:
func f(x *error) {
*x = fmt.Errorf("Some error")
}
請注意,接口本身可以有一個底層指針值:
func f(x someInterface) {
*x.(*someType) = value
}
func main() {
x := someType{}
f(&x)
}
這對于非接口類型是不同的。當您為非接口類型 定義方法時,該方法同時為和T定義。如果您為 定義方法,則它僅是為 定義的,而不是為 定義的。T*T*T*TT

TA貢獻1772條經(jīng)驗 獲得超8個贊
只需移除指針即可使用該界面。
func callHello(i myinter) {
i.hello()
}
該 func 現(xiàn)在將接受實現(xiàn)該接口的結構實例,或指向實現(xiàn)該接口的結構實例的指針。
func main() {
instance := mystruct{}
pointer := &mystruct{}
callHello(instance)
callHello(pointer)
}
輸出以下內(nèi)容:
I am T!
I am T!
Program exited.
- 3 回答
- 0 關注
- 167 瀏覽
添加回答
舉報