考慮以下類型聲明:type ( Embedded struct{} Actual1 struct{ *Embedded } Actual2 struct{ *Embedded } Actual3 struct{ *Embedded })現在考慮下面的函數,其中i可以是類型的Actual1,Actual2或者Actual3(或任何其它類型的嵌入Embedded以類似的方式)。我不能做類型斷言或類型切換,因為我不知道有多少類型包含Embedded,我所知道的i是它確實嵌入了Embedded類型。此函數將實例化一個i與embed新實例化的副本實例具有相同類型并在其上設置的新實例。func New(i interface{}, field *Embedded) interface{} { // Step 1. instantiate new instance of `i`, of same underlying type as `i` // Step 2. set `i.Embedded` to `field` // Step 3. return the new instance.}以下是用法:func main() { actual := &Actual1{} embed := &Embedded{} copied := New(actual, embed) if copied.(Actual1).Embedded != embed { log.Fatal("It didn't work!") }}New(...)函數的正確實現不能使用類型斷言或類型切換,也不會導致調用log.Fatal上面顯示的。
- 1 回答
- 0 關注
- 180 瀏覽
添加回答
舉報
0/150
提交
取消