А зачем тебе, просто опусти ошибку, если не нравится
Отбросьте. Или можно обёртку на одну строку сделать.
да мне компилятор наглядно показывает, что не используется переменная ошибки
func must[T any](v T, err error) T { if err != nil { panic(err) } return v }
спасибо за пример! но вариант выше гораздо понятнее, часть из того что Вы написали пока что не могу понять из-за отсутствия знаний по синтаксису
n := must(strconv.Atoi(s)) если случится ошибка - будет паника
главное не абъюзить
ну это я уже понял судя по тому как яро компилятор мне намекал, но всё же и данные я получаю в своей задаче гарантированно верные и существующие
что значит не абъюзить?
тогда тем более надо must() использовать
поищу-ка свежую книжку, прохожу курс на степике, версия языка постарее будет и про must ничего нет
Про must везде есть, про дженерики может и не быть Но оно тривиальное же, вполне из примера очевидное
похоже на адаптацию растового unwrap, не сказать что в go это прям рекомендуется и что вы найдете это в книжках
facepalm.jpg func must(v int64, err error) int64 { if err != nil { panic(err) } return v } n := must(strconv.Atoi(s)) существует в языке с первого дня генерики в go синтаксически взяты из rust, да. функционально победнее, правда.
что значит существует в языке? может я упустил
там можно выбрать, будет использована динамическая диспетчеризация или мономорфизация для твоего дженерик-кода, кажется
смотрите, там must принимает два значения. если некая функция возвращает два значения, совпадающих по типу с тем, что принимает первая - можно подавать выход второй на вход первой без промежуточных переменных.
Динамическая диспетчеризация - это про трейты, не совсем про дженерики. По умолчанию мономорфизация. Я просто прочитал сообщение как "побЕднее", стало интересно чем
я невеликий спец по расту. в go дженерики только про поведение, фактически - про то, что можно в interface описать. нельзя рекурсивный дженерик сделать. ну и довольно много всяких ещё ограничений. фактически, вот этот must, и родственники его pointer[T any](v T) *T и value[T any](v *T) T - вершина полезности гошных генериков
Да да, я неправильно прочитал сообщение, извиняюсь
Don't panic, один из proverb'ов
да не, я понимаю, как работает этот код, но красота конструкции против безопасности (вводим допущения о том что в нашем коде не будет ошибки в оборачиваемой функции) - вообще ни разу не бест практис
это не допущения, а уверенность, о чем слово must и говорит. если не уверены - не используйте
Т.е. лучше "graceful error handling", обернуть, отдать ошибку наверх. Паниковать только в крайних случаях когда программа не может продолжаться и должна немедленно упасть
ситуации бывают разные
спасибо, что разрешили не использовать
Обсуждают сегодня