// package decls, imports... // Person & Animal structs, which implement fmt.Stringer... func Concat(type T1, T2 fmt.Stringer)(f T1, s T2, delim string) string { return f.String() + delim + s.String() } func main() { res := Concat(Person{"John", "Doe"}, Animal{"Dog", "Richie"}, " loves his ") fmt.Println(res) }