Je
мне кажется, что наш лагерь разбился на тех, для кого golang первый язык и они не понимают, зачем дженерики, и тех, кто видел/писал на плюсах/java/c#
Pawel
Главное не забывать про то, что без типов сумм программировать нельзя. Не спрашивайте, что это значит. Это первая заповедь программиста! Она не подлежит обсуждению.
Алексей
мне кажется, что наш лагерь разбился на тех, для кого golang первый язык и они не понимают, зачем дженерики, и тех, кто видел/писал на плюсах/java/c#
в C# дженерики только дураки используют, ведь дженерики не нужны же, все нормальные пацаны в C# используют исключительно object в джаве тоже
саша
Ты не структуры приводи а их использование.
Есть банальный кейс - есть очередь комманд для выполнения таск менеджеру. Эта очередь может быть очень большая. Ну и всё вроде бы хорошо, взял слайс, написал по быстрому обёртку, чтобы был ринг. Но тут нам вдруг понадобились приоритеты. И всё, приехали.
Vladislav
"микросервисы"
Je
я писал всю жизнь на плюсах и C#. После Го меня от них тошнит
Так, а всю жизнь это сколько лабораторок?)
Vladislav
Так, а всю жизнь это сколько лабораторок?)
Дада. Типичная аппеляция к "я просто более опытный" без каких либо оснований.
Je
насколько мне известно боги плюсов с огромным презрением смотрят на го как на тупой кусок, где ничего нельзя, кроме как строгать рубанком, который выдал Роб) они больше в rust уходят и я с ними согласен
Алексей
Vladislav
Так тут же была аппеляция к авторитету роба пайка
Это был ответ на попытку просто принизить его непонятно зачем.
Pawel
Дада. Типичная аппеляция к "я просто более опытный" без каких либо оснований.
Так в этом же сосоит весь цимес! Придать своим словам убедительности, самоутвердиться как-то
Pawel
Ты не структуры приводи а их использование.
зачем? это же многабукф, куча саршип-опреаторов и прочего срашного говнокода, не убедительно будет совсем Чтобы не быть голословным, возьмем для примера код heap’а на Scala или на Go. Какой из них проще понять и рефакторить? Зачем в реализации heap’а на Scala такие абстракции, как stream, forest, fold, rank, flatten, map, singleton, monoid? Без них никак нельзя? :) https://github.com/scalaz/scalaz/blob/series/7.3.x/core/src/main/scala/scalaz/Heap.scala https://golang.org/src/container/heap/heap.go на этом савим жырную точку в этом базаре
саша
Slava
Лучше уж рубанком делать реальные проекты, чем ваять в подвале для себя :)
Je
Лучше уж рубанком делать реальные проекты, чем ваять в подвале для себя :)
Абсолютно согласен, поэтому я пишу на го, но никогда бы не позволил себе заявлять, что это лучший ЯП и дженерики не нужны - их все ждут
Pawel
Чем меньше абстракций - тем лучше?
Го - против бесполезных абстракций и монадирующих программистов. тут подробности https://medium.com/@kaveh.shahbazian/abstractions-the-costs-b0c00835aa8d
Антон
Чем меньше абстракций - тем лучше?
Конечно, ведь чем меньше абстракций, тем выше шанс, что они уместятся в голове типичного гофера
Cuno
мы тут дженерики обсуждали, а тут вдруг монады откуда то полезли
Ну дженерики и монады это же одно и то же, ненужные абстракции
Алексей
И как же мы выбираем какая абстракция полезная, а какая нет?
Какие абстракции Роб Пайк встроил в Go - такие полензые, остальные - нет
Ingitore
Company: Bitfury (Blockchain) Position: Senior Go / Golang Developer Short Description: We are looking for a Go programming language expert to join our team to design APIs, functionality and solutions for the next-gen financial services based on cutting edge blockchain technologies. Location: Novosibirsk Salary: $3+K Net depending on skills Full JD: https://spb.hh.ru/vacancy/25674491 #вакансия
Pawel
Ну дженерики и монады это же одно и то же, ненужные абстракции
примерно так. Дженерики мало кому нужны. Для особо упоротых есть github.com/ncw/gotemplate . Только почему-то дальше парочки стандартных структур (list, ring, set, heap) и алгоритмов (sort) дело не пошло. Причем необходимость list и ring высосана из пальца: — вместо list проще и эффективнее использовать стандартный слайс — ring используется чуть меньше, чем в одном проекте на миллион, где проще написать один раз реализацию этого ring под конкретный тип в 10 строчек. Set тоже легко заменяется стандартной map[key]struct{}, хотя синтаксический сахарок тут уже поприятнее. Остается лишь дженерики для heap и sort, которые необходимы лишь в небольшом проценте оптимизированных по скорости программ, где стандартные heap и sort на интерфейсах не подходят из-за накладных расходов на вызов интерфейсных функций. Приведите примеры из настоящих программ, где еще могут понадобиться эти дженерики? вот только если у вас есть трудности с пониманием того, чем настоящая программа отличается от академического плана - лучше не надо
Je
Отключаюсь, резюмируйте потом, пожалуйста- чем закончился очередной флейм и кто победил
Алексей
примерно так. Дженерики мало кому нужны. Для особо упоротых есть github.com/ncw/gotemplate . Только почему-то дальше парочки стандартных структур (list, ring, set, heap) и алгоритмов (sort) дело не пошло. Причем необходимость list и ring высосана из пальца: — вместо list проще и эффективнее использовать стандартный слайс — ring используется чуть меньше, чем в одном проекте на миллион, где проще написать один раз реализацию этого ring под конкретный тип в 10 строчек. Set тоже легко заменяется стандартной map[key]struct{}, хотя синтаксический сахарок тут уже поприятнее. Остается лишь дженерики для heap и sort, которые необходимы лишь в небольшом проценте оптимизированных по скорости программ, где стандартные heap и sort на интерфейсах не подходят из-за накладных расходов на вызов интерфейсных функций. Приведите примеры из настоящих программ, где еще могут понадобиться эти дженерики? вот только если у вас есть трудности с пониманием того, чем настоящая программа отличается от академического плана - лучше не надо
вместо list проще и эффективнее использовать стандартный слайс интересно почему это?
Pawel
Отключаюсь, резюмируйте потом, пожалуйста- чем закончился очередной флейм и кто победил
какая разница? Человечество спасут монадирующие программисты. Инфа 100%
Maxim
Флейма не было бы если бы все в чате имели одинаковые скиллы)
Aleksandr
ладно, ребятки, давайте 5 минут на завершение, или я принудительно завершу
Je
какая разница? Человечество спасут монадирующие программисты. Инфа 100%
Я не был за усложнение, но притягивать дженерики к рокет-саенсу по-моему это слишком, выглядит неуклюже доказывать будто бы это не нужно
Alexander
ух ты ж ёшкин кот как это важно - скала и скалаЗЗ, этож совсем другое, простите
вообще-то да. scalaz - отдельная либа. которая вообще никакого отношения к стандартной библиотеке не имеет. так что ваше "ух ешкин кот", это высер какой-то и полное незнание матчасти. за сим тоже откланиваюсь.
Алексей
Резюме: дженерики не нужны, потому что Роб Пайк так сказал, но встроенные обобщённые типы почему то нужны. И да, встроенных обобщённых типов должно хватить всем, если вдруг не хватит, значит лучше взять монады из скалы (причём тут монады и скала мы так и не выяснили).
Vladislav
Я не был за усложнение, но притягивать дженерики к рокет-саенсу по-моему это слишком, выглядит неуклюже доказывать будто бы это не нужно
просто сначала думаем зачем нужно, потом добаляем, нужно для контейнеров. Зачем контейнеры сложные в современном мире, когда можно рядом базу с кучей индексов поднять или еще что непонятно.
Vladislav
Поднять базу ради контейнера? Это мощно
Так стейтлесс и микросерисы. Скейлится хорошо зато.
Антон
Так стейтлесс и микросерисы. Скейлится хорошо зато.
Кхм. По твоему, если состояние выносится в БД — это stateless?
Vladislav
Кхм. По твоему, если состояние выносится в БД — это stateless?
ну это еще не все, конечно. Просто контейнеры - один из стейтов.
Je
ну это еще не все, конечно. Просто контейнеры - один из стейтов.
Пошел полный бред дальше, извините. Но чтоб контейнеры называли стейтом в контексте стейтлесс-приложений это я еще не видел
Stepan
Возникало
Как решили?
Emil
Как решили?
Прокидыванием внутрь контейнера докер сокета и там уже через докер апи по сопоставлению айпи контейнера, но у нас не только для этого был сокет внутрь прокинут
Emil
Ну тогда вот решение
Маjко
Весело у вас тут
Emil
Там в итоге можно даже курлом и jq обойтись
Pawel
вместо list проще и эффективнее использовать стандартный слайс интересно почему это?
ну вот видишь, ты даже такие простые вопросы не знаешь, на которые любой юниор ответит будучи ночью разбуженным. Как с тобой можно о чём то говорить при такой пропасти в квалификации?
Pawel
нуну
Kirill
Здравствуйте, никто не хочет побыть ментором? Мне нужен ментор\помошник возможно консультант, не знаю как правильнее будет звучать - проконсультировать по архитектуре и так далее, выслушать мои мысли и скорректировать их в нужном направлении. Не задаю вопросов не прогуглив всё что только можно, неплохо знаю английский, буду задавать только конкретные вопросы касаемо направления и лучшего решения в той или иной ситуации. Не бесплатно конечно. И не слишком часто. Буду рад фидбеку, спасибо
Aleksandr
чат в том числе для этого. бесплатно. велкам
Oleh
У кого-нибудь возникала необходимость засунуть в reflect.Value у которого к примеру *int внутри и засунуть в него другой reflect.Value c типом int внутри и наоборот. бьюсь на этим вопросом уже пятый час и не помогли многократное чтение документации, гугл. Может кто справлялся с подобной проблемой? https://play.golang.org/p/OpYQHIocNF2
Stepan
path, id, err = list[0], strconv.Atoi(list[1]) Как записать это правильно? ./scan.go:356: multiple-value strconv.Atoi() in single-value context ./scan.go:356: assignment count mismatch: 3 = 2
Alan
Ты хочешь заполнить 3 переменные, а кладешь всего 2
Stepan
Ты хочешь заполнить 3 переменные, а кладешь всего 2
path, id = list[0], strconv.Atoi(list[1]) /scan.go:356: multiple-value strconv.Atoi() in single-value context
Andrei 🦉
path, id, err = list[0], strconv.Atoi(list[1]) Как записать это правильно? ./scan.go:356: multiple-value strconv.Atoi() in single-value context ./scan.go:356: assignment count mismatch: 3 = 2
у го тюплы очень ограниченны, он так распаковывать не умеет (я вообще на вскидку не помню, какой язык умеет так распаковывать)
Andrei 🦉
даже питон вот конкретно так не умеет
Stepan
Крч как мне изящнее поступить чтобы не заводить кучу переменных?
Stepan
Крч как это можно сделать изящно?
Stepan
Подскажите
John
в любом случае раскидать в 2 строки, в одной определить path, в другой id и err
Andrei 🦉
Умеет
https://repl.it/repls/DifferentTiredCoordinate не умеет