Обложка канала

Sea++

Канал об интересных материалах из мира C/C++, Python, Go, Linux и не только. Новости, заметки, полезные советы и многое другое.

Sea++

8 лет назад
Открыть в
Go 2 Draft

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