這是我從下面的簡單重現(xiàn)案例中得到的輸出:2015/06/22 21:09:50 ok: false2015/06/22 21:09:50 stub: *main.Stub <nil>顯然,存根被正確標記為指向存根類型的指針,但轉換失敗。我正在嘗試更新數(shù)組的內容。package mainimport "log"const BUFFER_SIZE = 8type Value struct { value int}func (v Value) Value() int { return v.value }func (v *Value) SetValue(value int) { v.value = value }type Stub struct { Value testString string}type StubFactory struct{}type FactoryInterface interface { NewInstance(size int) []interface{}}func (factory StubFactory) NewInstance(size int) []interface{} { stubs := make([]interface{}, size) for i, _ := range stubs { stubs[i] = &Stub{Value: Value{i}, testString: ""} } return stubs}type Buffer struct { values []interface{}}func NewBuffer(factory FactoryInterface, size int) *Buffer { return &Buffer{values: factory.NewInstance(size)}}func (buf *Buffer) Get(index int) interface{} { return &buf.values[index]}func main() { stubFactory := &StubFactory{} buffer := NewBuffer(stubFactory, BUFFER_SIZE) index := 0 if stub, ok := buffer.Get(index).(*Stub); ok { // THIS FAILS :-( log.Printf("ok: %+v\n", ok) log.Printf("stub: %T %+v\n", stub, stub) stub.SetValue(1234) log.Printf("value:%+v\n", buffer.Get(index)) // I WANT "1234" } else { log.Printf("ok: %+v\n", ok) log.Printf("stub: %T %+v\n", stub, stub) // but this shows the right type }}
1 回答

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
錯誤是:
func (buf *Buffer) Get(index int) interface{} {
return &buf.values[index]
}
你想做:
func (buf *Buffer) Get(index int) interface{} {
return buf.values[index]
}
當您返回 &buf.values[index] 時,您將返回一個指向接口的指針。哪個是 *(*Stub) (在某種意義上)
- 1 回答
- 0 關注
- 446 瀏覽
添加回答
舉報
0/150
提交
取消