// 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)
}