Your comments

Пример для шаблонного метода выше на Go выглядит примерно так:

package main

import (
    "fmt"
)

type IEmployee interface {
    post() string
}

type Employee struct {
    name    string
    virtual IEmployee
}

func (this *Employee) greeting() string {
    return "Hello, my name is " + this.name + ", I am a " + this.virtual.post()
}

type Manager struct {
    Employee
}

func (this *Manager) post() string {
    return "Manager"
}

func makeManager(name string) *Manager {
    result := &Manager{Employee{name, nil}}
    result.Employee.virtual = result
    return result
}

type Welder struct {
    Employee
    degree int
}

func (this *Welder) post() string {
    return "сварщик " + fmt.Sprint(this.degree) + " разряда"
}

func makeWelder(name string, degree int) *Welder {
    result := &Welder{Employee{name, nil}, degree}
    result.Employee.virtual = result
    return result
}

func main() {
    m := makeManager("Петя")
    w := makeWelder("Коля", 6)
    fmt.Println(m.greeting())
    fmt.Println(w.greeting())
}

Можно запустить: https://play.golang.org/p/ajvp-0iNpbR