使用 golang html/template(与 相同的行为text/template)。如果我有一个带有接口类型成员的结构,我将无法访问底层类型的成员(特别是尝试访问实现接口InnerInterface但通过InnerInterface接口类型而不是结构类型返回的结构上的字段) .
http://play.golang.org/p/ZH8wSK83oM
package main
import "fmt"
import "os"
import "html/template"
type InnerInterface interface{ InnerSomeMethod() }
type MyInnerStruct struct { Title string }
func (mis MyInnerStruct)InnerSomeMethod() { fmt.Println("Just to show we're satisfying the interface") }
type MyOuterStruct struct { Inner InnerInterface }
func main() {
fmt.Println("Starting")
arg := MyOuterStruct{Inner:MyInnerStruct{Title:"test1"}}
err := template.Must(template.New("testtmpl").Parse("{{.Inner.Title}}")).Execute(os.Stdout, arg)
if err != nil { panic(err) }
}
更改:type MyOuterStruct struct { Inner InnerInterface }到一个完全通用的界面,即使type MyOuterStruct struct { Inner interface{} }其正确呈现。这让我相信interface{}渲染引擎会特别对待它。
有没有比interface{}在我希望能够动态评估这样的字段时使用更好的方法?
相关分类