猿问

界面中存在不相关的方法会破坏文本/模板吗?

游乐场链接:http : //play.golang.org/p/Ebf5AuJlcP

type Foo interface {}


type Bar interface {

    ThisIsABar()

}


// Person implements both Foo and Bar

type Person struct {

    Name string

}


func (p Person) ThisIsABar() {}


type FooContext struct {

    Something   Foo

}


type BarContext struct {

    Something   Bar

}


func main() {

    t := template.Must(template.New("test").Parse("{{ .Something.Name }}\n"))


    // This works fine.

    if err := t.Execute(os.Stdout, FooContext{Person{"Timmy"}}); err != nil {

        fmt.Printf("Error: %s\n", err)

    }


    // With BarContext, containing the exact same Person but wrapped in a

    // different interface, it errors out.

    if err := t.Execute(os.Stdout, BarContext{Person{"Timmy"}}); err != nil {

        fmt.Printf("Error: %s\n", err)

    }

}

当我渲染一个text/template包含的模板(通过包)时{{ .Something.Name }},我可以通过Foo不包含任何方法的接口,并且它工作正常。但是,如果我Bar改为通过界面,我会得到:


executing "test" at <.Something.Name>: can't evaluate field Name in type main.Bar

为什么接口上存在一个甚至没有使用的不相关方法会影响模板的呈现?


慕莱坞森
浏览 195回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答