Изменения ожидаемые в Go 2
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.18 05:33
Оценка:
Go вроде не очень популярен на РСДН (что очень зря, но...), так что эта новость осталась незамеченной. Итак, авторы Go наконец-то признали, что текущая ситуация с обработкой ошибок и отсутствием шаблонов всё же ошибка дизайна, а не фича. В результате родились следующие предложения по:

  1. Обработке ошибок и представлении ошибок.
  2. Дженерикам.
Предложение по дженерикам мне кажется довольно неудачным, так как все сводится к идее написания contract, в котором будут перечислены все допустимые для типа операции, например так:

contract stringer(x T) {
    var s string = x.String()
}
func Stringify(type T stringer)(s []T) (ret []string) {
    for _, v := range s {
        ret = append(ret, v.String()) // тут мы знаем что T имеет метод String 
    }
    return ret
}


Так как Stringify может требовать более глубокого понимания методов представляемых T, contract будет разрастаться. Типичный примитивный, но очень прямолинейный подход характерный для Go

С обработкой ошибок всё как мне кажется лучше, добавили ключевые слова handle (общее описание обработки ошибки) и check (применить описанный выше handle в случае возникновения ошибки). Вроде удобно для мира Go вышло.

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
}
go go2 архитектура дизайн языков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.