English version: https://telegra.ph/Go-2-Draft-08-29
Вчера Расс Кокс (Russ Cox) выпустил короткую видео заметку о Go 2: https://blog.golang.org/go2draft
Слухи были верны: в Go 2 будет улучшенная обработка ошибок и дженерики.
Вот пример обработки ошибок с использованием ключевого слова
check: func CopyFile(src, dst string) error {
handle err {
return fmt.Errorf("copy %s %s: %v",
src, dst, err)
}
r := check os.Open(src)
defer r.Close()
w := check os.Create(dst)
handle err {
w.Close()
os.Remove(dst) // (only if a check fails)
}
check io.Copy(w, r)
check w.Close()
return nil
}
А вот пример дженериков с использованием контрактов: contract Addable(t T) {
t + t
}
func Sum(type T Addable)(x []T) T {
var total T
for _, v := range x {
total += v
}
return total
}
Оригинальный черновик можно прочитать тут: https://go.googlesource.com/proposal/+/master/design/go2draft.md