使用 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{}
有没有比在我希望能够动态评估这样的字段时使用更好的方法来做到这一点?