【发布时间】:2016-01-15 18:09:46
【问题描述】:
我想像这样替换接口的值:
package main
import "fmt"
type Fooer interface {Foo(string)}
type Foo struct {foo string}
func (f *Foo) Foo(bar string) {f.foo = bar}
var z = &Foo{foo : "new"}
func swap(fooer Fooer) {fooer = z}
func main() {
f := &Foo{foo: "old"}
fmt.Printf("%s (want &{old})\n", f)
swap(f)
fmt.Printf("%s (want &{new})", f)
}
但我明白了:
&{old}
&{old}
我尝试了各种调用(fooer *= z、*fooer = *z、..),但我似乎无法正确处理。
你可以在 play.golang 上试试这个例子:http://play.golang.org/p/EZEh3X8yHC
好的,我认为它是这样工作的:
func swap(fooer Fooer) {
foo, _ := fooer.(*Foo)
*foo = *z
}
【问题讨论】:
-
您的编辑可能更像您想要的,但是界面没有意义,因为您只能分配完全相同的类型。
-
是的,绝对正确:D