Информация об изменениях

Сообщение Re[4]: Го уродлив!!! от 04.05.2022 17:13

Изменено 04.05.2022 17:14 vsb

Re[4]: Го уродлив!!!
Здравствуйте, Pzz, Вы писали:

Pzz>>>А куда он должен его добавлять?


vsb>>В создаваемую ошибку.


Pzz>Ты имеешь ввиду в строку, или куда?


Errorf возвращает объект, в котором есть строка с описанием ошибки и ссылка на предыдущую ошибку. Вот в этот объект надо добавить еще поле со стектрейсом, полным или хотя бы caller. И распечатывать это при форматировании.

https://pkg.go.dev/golang.org/x/xerrors вот этот пакет был прототипом этого функционала в стандартной библиотеке го, можно посмотреть, как там сделано. На предложение использовать этот пакет сразу отвечу, что я не люблю писать не-идиоматический код, а в го — особенно.

vsb>>>>:= абсолютно упоротая конструкция. Зачем она нужна в текущем виде — я вообще не понимаю.


Pzz>>>Для автовывода типа переменной.


vsb>>Для этого есть var.


Pzz>На практике, слово var встречается довольно редко. Когда переменную продекларивовать надо, а проинициализировать нечем.


var x = value это валидный го-код. И var x1, x2 = value1, value2. Одно из отличий в том, что с := можно объявить одну переменную, когда вторая уже объявлена, ну ок, это может быть удобно. Но удобно это было бы, если бы := в принципе работала, как универсальная конструкция, позволяющая либо объявлять, либо присваивать значение. Но она так не работает. И порой приходится проходить по коду и заменять := на = из-за того, что сверху объявили переменную с таким именем. В общем единственное отличие и то наполовину бесполезное.
Re[4]: Го уродлив!!!
Здравствуйте, Pzz, Вы писали:

Pzz>>>А куда он должен его добавлять?


vsb>>В создаваемую ошибку.


Pzz>Ты имеешь ввиду в строку, или куда?


Errorf возвращает объект, в котором есть строка с описанием ошибки и ссылка на предыдущую ошибку. Вот в этот объект надо добавить еще поле со стектрейсом, полным или хотя бы caller. И распечатывать это при форматировании.

https://pkg.go.dev/golang.org/x/xerrors вот этот пакет был прототипом этого функционала в стандартной библиотеке го, можно посмотреть, как там сделано. На предложение использовать этот или подобный пакет сразу отвечу, что я не люблю писать не-идиоматический код, а в го — особенно.

vsb>>>>:= абсолютно упоротая конструкция. Зачем она нужна в текущем виде — я вообще не понимаю.


Pzz>>>Для автовывода типа переменной.


vsb>>Для этого есть var.


Pzz>На практике, слово var встречается довольно редко. Когда переменную продекларивовать надо, а проинициализировать нечем.


var x = value это валидный го-код. И var x1, x2 = value1, value2. Одно из отличий в том, что с := можно объявить одну переменную, когда вторая уже объявлена, ну ок, это может быть удобно. Но удобно это было бы, если бы := в принципе работала, как универсальная конструкция, позволяющая либо объявлять, либо присваивать значение. Но она так не работает. И порой приходится проходить по коду и заменять := на = из-за того, что сверху объявили переменную с таким именем. В общем единственное отличие и то наполовину бесполезное.