使用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{}
每當我想能夠動態評估這樣的領域?
Tks for this - 就我的項目結構而言,它不能將Title()方法放在界面上,但是我得到了涉及的因素。當我需要從模板中輕鬆訪問時,我最終使用了接口{}類型字段。這並不完美,但可行;而且很清楚發生了什麼事情。 –