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