Anton
или у тебя есть какая-то функция и ты хочешь принимать только значения в цельсиях.
Anton
достаточно? :)
Stanislav
А может кто-нибудь объяснить, зачем какой-то стандартный тип заменять своим именем? Всякие type lol int Я могу понять, если его потом расширять какими-то функциями, но когда просто заменяют и все. Красоты и эстетики ради?
тут нужно почитать про типы (кейворд type) и как это можно использовать при использовании в ООП, например. У меня в свое время отпали почти все вопросы ;)
Stanislav
и то, что написал Антон выше - это только частность
Konstantin
нууу, как тебе сказать.. type celsius int type fahrenheit int это одно и тоже или разное? :)
В целом почти одно и тоже, что помешает сунуть число где нужно цельсия, но случайно вставив ф. добавляет долю удобства при работе с переменными и просто логикой, но это случай где используется для различния типов, а бывает и просто так.
Stanislav
Ок, что ``type ololo struct`` и ``func (o *ololo) somefunc()`` как не подобие ООП?
Stanislav
Ну и наследование есть (точнее, включение элементов одного типа в другой)
Ivahaev
Нет наследования, есть встраивание.
Daniel
каковое просто синтаксический сахар
Konstantin
То что пытается пародировать ооп я не спорю)
Konstantin
Хотя и крича, что оно не нужно)
Anonymous
https://stackoverflow.com/a/19334952
Stanislav
Но это все не отменяет того, что на Го можно писать, "пародируя ООП", в относительно привычной для ООПшников манере, с поправками на.
Anton
В целом почти одно и тоже, что помешает сунуть число где нужно цельсия, но случайно вставив ф. добавляет долю удобства при работе с переменными и просто логикой, но это случай где используется для различния типов, а бывает и просто так.
ну просто от каких-то ошибок тебя компилятор спасет, если будешь пытаться выезжать на типах. например: https://play.golang.org/p/FDpbtTNSJO и в больших проектах это весьма удобно порой ;)
Konstantin
Хотя на вопрос ответа пока я и не получил особо. Да, есть пример с двумя типами для дальнейшего различия их. А что насчет с просто отдельным типом?
Konstantin
Мне это нравится чисто из эстетических соображений, но прям какой-то вау пользы не вижу
Anonymous
я вот скинул ссылку на то, как алиасы работают
Anonymous
но зачем это надо ответа действительно не было, хотя написано много буков)
Anton
Мне это нравится чисто из эстетических соображений, но прям какой-то вау пользы не вижу
ну чисто ради алиасов - смысла не особо много ;) эстетика, где-то меньше символов с клавиатуры набирать.. ну и где-то безусловно читаемость кода улучшает
Anonymous
типы алисы структур еще понятно
Anonymous
но вот алиасы интов и стрингов - какая-то херня
Daniel
коллеги, вы про какие алиасы?
Konstantin
ну просто от каких-то ошибок тебя компилятор спасет, если будешь пытаться выезжать на типах. например: https://play.golang.org/p/FDpbtTNSJO и в больших проектах это весьма удобно порой ;)
Но если в weather передать просто int оно скомпилируется спокойно. weather(10) например, надо цельсии, а я фаренгейты по глупости там выдал и все.
Daniel
можно сделать свой неэкспортируемый тип, и ошибки предопределенные сделать этого типа. пользоваться можно, переопределить - нет
Daniel
это из соседнего чата
Konstantin
но вот алиасы интов и стрингов - какая-то херня
а встречается часто. я понимаю, если он - алиас - делается для того, чтобы расширить тип стандартный. но просто так часто делают
Daniel
вариантов больше одного
Anonymous
как можно расширить int?
Daniel
с помощью алиасного типа и констант можно эмулировать enum
Konstantin
type siski int func (s *siski) touchThem() { ... }
Konstantin
По сути инт, но уже с новой функцией
Daniel
и в Context рекоммендуется класть ключи алиасного типа, чтобы случайно по именам не пересечься
Anonymous
не думал о навешивании ф-ций на простые типы, интересно
Daniel
в go нет простых типов
Konstantin
не думал о навешивании ф-ций на простые типы, интересно
Да я сам узнал недавно, когда в интерфейсы вникал.
Konstantin
Порадовала такая возможность простенькая.
Konstantin
Но а простые тупо элиасы все равно не понимаю зачем.
Daniel
можно поподробнее?
что именно надо развернуть?
Konstantin
Хотя и юзаю из красоты, ахах
Anonymous
что именно надо развернуть?
ровно то, что процитировано
Daniel
какое слово непонятно?
Konstantin
клать
Konstantin
ахах
Anonymous
какое слово непонятно?
вы тут выше писали, что имеет сложности в работе ) по-моему не мудрено ) >и в Context рекоммендуется класть ключи алиасного типа, чтобы случайно по именам не пересечься о чем тут речь? context.WithValue ? это само по себе антипаттерн
Michael
капец, кто-то ночью рассуждает об ООП и его отсутствии в GO это был троллинг или серьёзно?
Anatoly
это плохо?
Michael
мне хорошо, я их послушал
Michael
ага, луна высоко
Anton
Добрый день! Подскажите, пожалуйста, есть функция, которая постоянно получает приходящие через веб-сокеты сообщения. Каналов для сокетов много, и прослушивание каждого из них запущено через горутину, приходящие сообщения пишутся в канал. Возникли следующие вопросы: 1 как правильно захендлить ошибки, которые внутри каждой горутины могут возникнуть? 2. канал для сообщения никогда не закрывается. должен ли я как-то его регулярно очищать, чтобы он не забивался кучей данных?
Anton
Anton
да, я читал о таком подходе а потом их с каким-то интервалом проверять? или же можно повесить какой-то листенер на канал, который будет запускать функцию при изменении канала?
Evgeny
1. Слать ошибки в канал 2. канал не забъется, потому как, если канал не буферизированный, то выполнение кода будет приостановлено до тех пор, пока на другом конце канала не появится получатель, для буферизированного канала, про достижжении его лимита будет аналогична ситуация.
Anton
а как потом ошибки хэндлить?
Evgeny
>а потом их с каким-то интервалом проверять? проверять сразу
Anton
а как я сразу узнаю, что в канал пришла ошибка?
Evgeny
>а как потом ошибки хэндлить? писать в лог, писать в /dev/null, показвать пользователю whatever
Evgeny
>а как я сразу узнаю, что в канал пришла ошибка? Использовать отдельный канал для ошибок
Anton
>а как я сразу узнаю, что в канал пришла ошибка? Использовать отдельный канал для ошибок
тут вопрос не в том, чтобы узнать, ошибка пришла или нет, а в том, чтобы узнать, что только что в канал что-то добавилось, надо это захендлить
Evgeny
// Error listener go func () { for { err := <- errChan // do something with err } }()
Anton
а как только из канала что-то присвается переменной, оно извлекается из канала, так сказать? использование вот таких бесконечных циклов в го - нормальная практика?
Evgeny
>а как только из канала что-то присвается переменной, оно извлекается из канала, так сказать? именно
Evgeny
>использование вот таких бесконечных циклов в го - нормальная практика? цикл будет заблокирован до тех пор, пока не появится сообщений в канале
Anonymous
а как только из канала что-то присвается переменной, оно извлекается из канала, так сказать? использование вот таких бесконечных циклов в го - нормальная практика?
на самом деле желательно предусматривать отмену горутины с корректным закрытием все ресурсов т.е. юзать например  context.WithCancel
Anonymous
http://dahernan.github.io/2015/02/04/context-and-cancellation-of-goroutines/
Evgeny
>а зачем для хендлинга ошибок тоже запускать горутину? с горутиной https://play.golang.org/p/z6LUaieMKk без горутины https://play.golang.org/p/w9eOQ6ZnNA
Evgeny
>использование вот таких бесконечных циклов в го - нормальная практика? хотя, быть может лучше будет сделать for err:= range errChan { ... }
Konstantin
на самом деле желательно предусматривать отмену горутины с корректным закрытием все ресурсов т.е. юзать например  context.WithCancel
Никогда это не проверял( а можно поподробнее про отмену рутины. Это какие обстоятельства?