
@tgstat_bot
2020 <channel name>и популярный пост https://t.me/oleg_log/2967
Size: a a a








func main() {
printName(Cat{"Whiskey"})
printName(Dog{"Chappie"})
}
type Cat struct { Name string }
type Dog struct { Name string }
type named = struct { Name string }
func printName(n named) {
fmt.Println(n.Name)
}
В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.
Cat/Dog в printName их не надо явно приводить к named.= и будем вам счастье)








for k, v := range foo {
go func() { run(k,v) }()
}
или что-то похожее, где "захватывается" значение в кложуре. Есть даже пропозал, что давайте от этого уйдём (в го2, когдатотам) https://github.com/golang/go/issues/20733


