Comments 13
func MaxInt**()
Объясните, пожалуйста, бестолковому, что это за две звезды после имени функции? Go 1.19 такую конструкцию отказывается понимать
Нда, если со стороны посмотреть как-то неоднозначно вышло. Я их отводил для номера функции, типа что я сгенерировал функции MaxInt0001, MaxInt0002 и так далее. Пожалуй, лучше заменить на номер. Спасибо)
func Scale[S []~E, E int](s S, sc E) S{}
Я, возможно, опять не догоняю, но Go 1.19 на тильду в декларации типа слайса ругается, говорит что expected type, found '~' syntax.
Так то понятно, что имеются в виду все типы, производимые от int. Но это мне понятно, а компилятору почему-то нет
В опросе не сказано на каком языке используются дженерики, а в C# и Java без них никуда.
Хорошее замечание. Думаю сейчас менять результаты опроса будет уже как-то нечестно по отношению к проголосовавшим джавистам.
Я думаю для не-go языка имеется ввиду использование в интерфейсе ваших собственных функций/классов (а не использование API коллекций). Да и для Go должно подразумеваться то же самое, в конечном итоге разницы не должно быть - дженерики они и в Африке дженерики))
Когда-то любил дженерики на жаве когда под андроид писал. Ждал женерики на го. Никак не могу побороть дискомфорт от этого вырвиглазного синтакса :/
Да, понимаю зачем и почему синтаксис именно такой. Да, думаю привыкну... и все же, не покидает меня чувство что в той же жаве или c# женерики очень просто и понятный концепт с очень простым синтаксисом. Тут же в "простом го" и на дженерики надо еще правила использования помнить...
Почему глядя на go женерики я не испытываю удовольствия?
На последний вопрос мне ответить сложно, это кажется скорее к терапевту)
На счёт правил. Сперва я даже не понял о чём речь, пока моя лучшая догадка такая: нельзя использовать неограниченный дженерик в функции которая требует сложения или других операций, которые нельзя выполнить на любом типе данных. Что я могу сказать по этому поводу? Во-первых, компилятор сам всё проверит и доходчиво объяснит что ему не нравится. Во-вторых, это скорее логическая ошибка, чем какое-то особое "правило" использования дженериков. Ведь если функция не может быть корректно использована, значит она некорректная, не так ли? Если я ошибся в том как понял "правила", то поясните пожалуйста.
По части синтаксиса, какие у вас есть предложения? Сейчас уже пропоузал прошёл, менять ничего не будут, обратная совеместимость же. Но мне очень интересно что именно здесь не очевидно и как можно было бы лучше. Для меня дженерики в Go оказались очень понятными, вкатился мгновенно)
Чем больше мы хотим от языка скорости и функцинальности, тем более кучерявым становится синтаксис. К версии 2.0 Go будет не отличить от Rust.
Спасибо большое за статью. Очень познавательно.
Я уже несколько лет пишу на Go в прод, хотя знакомство с языком начал с
самых ранних версий. Я видел такое, что вам, людям, и не снилось. Атакующие корабли, пылающие над Орионом; лучи Си, пронизывающие мрак близ ворот Тангейзера, как Garbage Collector мог сделать stop the world на пару секунд, страдал от отсутствия системы зависимостей и других проблем.
Дженерики в Go: когда нужны и когда можно без них