希望能實作如下的功能,嘗試了很久一直不對,請教各位大神
現在有一個interface : I
type I interface {
DO()
}I有兩個子類D1和D2,D1和D2都會占用某個唯一的資源,因此不能復制
現在有一個struct : S,我希望能運行時賦值 ii,并呼叫DO函式
我以為可以這樣寫
type S struct {
ii *I
}
//
func (s *S) Do() {
s.ii.DO()
}
//
d1 := D1{}
d2 := D2{}
s1 := S{ ii : d1 }
s2 := S{ ii : d2 }
但是發現無法編譯
如果寫成
type S struct {
ii I
}這里就會有拷貝。。。
嘗試了各種姿勢始終不行。。。
uj5u.com熱心網友回復:
step1:type I interface {
DO()
}
step2:
type S struct {
ii I
}
step3:
d1 := &D1{}
d2 := &D2{}
step4:
s1 := S{ ii : d1 }
s2 := S{ ii : d2 }
uj5u.com熱心網友回復:
Interface里面的DO是大寫。func(s *S)DO(){//xxx}
uj5u.com熱心網友回復:
s1 := S{ ii : &d1 }s2 := S{ ii : &d2 }
uj5u.com熱心網友回復:
我覺得 編譯的時候 問題已經報的很明顯了s1 := S{ ii : &d1 }
s2 := S{ ii : &d2 }
要使用指標地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/130438.html
標籤:go語言
上一篇:我是計算機系的今年畢業,但是只有畢業證,找作業影響大嗎
下一篇:中斷型別碼
