恐慌:模板:重新定义模板

I got layout.tmpl:

<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>  
    <div id='left'>
        {{template "left" .}}
    </div>
    <div id='right'>
        {{template "right" .}}
    </div>
</body>
</html>

and mainPage.tmpl:

{{define "left"}}
  left content
{{end}}

{{define "right"}}
    right content
{{end}}

and someOtherPage.tmpl:

{{define "left"}}
  left content 2
{{end}}

{{define "right"}}
    right content 2
{{end}}

and martini go web app using that templates martiniWebApp.go:

package main
import (
    "github.com/go-martini/martini"
    "github.com/martini-contrib/render"
)

func main() {
    m := martini.Classic()
    m.Use(render.Renderer(render.Options{
        Layout: "layout",
    }))

    m.Get("/", func(r render.Render) {
        r.HTML(200, "mainPage", nil)
    })

    m.Get("/somePage", func(r render.Render) {
        r.HTML(200, "someOtherPage", nil)
    })
    m.Run()
}

When I run my app go run martiniWebApp.go I got error:

panic: template: redefinition of template "left"

If I remove file someOtherPage.tmpl and route /somePage from web app then error disappear. But how to organise layout-block construction to resuse common layout html and define only few blocks on every specific page?

You can go the other way around and and include the pieces you want in the page. Something like

{{template "header.html" .}}

 contents 

{{template "footer.html" .}}