KP>А в целом-то как ощущения? Я по началу, после C++ очень плевался от Go, но сейчас мне скорее C++ кажется переусложенным (да еще и без каналов и зеленых потов, что вообще фи).
Смотря с чем сравнивать. Любой язык с GC и лаконичным синтаксисом будет восприниматься проще чем C++. Тут скорее другое интересует: в каких таких областях Go и C++ конкурируют? Если речь о том, что были тоны говнокода на "Си с классами" родом из 90-х, над которыми в течении многих лет надругались толпы "индусов" всех национальностей, и о качестве/производительности речи нет, тогда понятно в чем преимущество Go. Но если брать более нормальные условия?
Если же сравнивать с языками с GC, с каким-нибудь D, то вообще непонятно, в чем преимущества Go. Писать код
вида:
func (c *Config) Clone() Config {
clone := func(m map[uint64]struct{}) map[uint64]struct{} {
if m == nil {
return nil
}
mm := make(map[uint64]struct{}, len(m))
for k := range m {
mm[k] = struct{}{}
}
return mm
}
return Config{
Voters: quorum.JointConfig{clone(c.Voters[0]), clone(c.Voters[1])},
Learners: clone(c.Learners),
LearnersNext: clone(c.LearnersNext),
}
}
можно на любом современном языке. И на каком-нибудь Rust-е это будет даже получше делать, т.к. там меньше проверок на nil нужно выполнять.