This repository has been archived on 2021-09-07. You can view files and clone it, but cannot push or open issues or pull requests.

41 lines
742 B
Go
Raw Permalink Normal View History

2018-01-16 23:37:28 +03:00
package template_p
import (
"fmt"
)
type Greeter interface {
message() string
}
type GreeterTemplate interface {
first() string
third() string
greet(Greeter) string
}
type PrincesGreeterTmpl struct {}
func (p PrincesGreeterTmpl) first() string {
return "Welcome"
}
func (p PrincesGreeterTmpl) third() string {
return "to our palace!"
}
func (p PrincesGreeterTmpl) greet(g Greeter) string {
return fmt.Sprintf("%s, %s %s", p.first(), g.message(), p.third())
}
type PrincesGreeter struct {
name string
}
func (p *PrincesGreeter) message() string {
return fmt.Sprintf("your magesty princes %s", p.name)
}
func Demo() {
prGreeter := &PrincesGreeter{"Diana"}
tmpl := PrincesGreeterTmpl{}
fmt.Println(tmpl.greet(prGreeter))
}