Anonymous
А давно из питона го начали делать ?
a = [] # type: List[str]
Roman
//go:generate
?
А оно в каком контексте будет выполнено? В меня структуры зависят от целевой платформы
heavycharged
что-то я затупил, есть тип type HandlerError struct {}, с методом Error() string, есть канал chan HandlerError, есть функция, которая принимает аргумент errors <-chan error. Собственно, ошибка: cannot use errorChan (type chan status.HandlerError) as type <-chan error in argument to helper.DumpInfo. В канал же можно слать интерфейсный тип, и дергать метод, что не так? на что он ругается?
heavycharged
интерфейсный тип, я имею ввиду error же сам по себе интерфейс. мне нужно и на канале определить error тип?
.
.
Anonymous
python type hinting
Anonymous
https://www.python.org/dev/peps/pep-0484/#scoping-rules-for-type-variables
Andrei 🦉
heavycharged
Тип chan и <-chan это разные типы
погоди, если я создаю канал, я же не могу создать канал из которого можно только читать, когда я передаю в функцию, тогда стрелка уже меняет суть, т.е. я не смогу записать в канал, если в сигнатуре указано что можно только читать
heavycharged
вот в этом случае, делаю chan HandlerError
а в функцию передаю <-chan error
heavycharged
HandlerError реализует интерфейс error
heavycharged
но он ругается
heavycharged
сейчас попробую без стрелки
heavycharged
не, тут дело не в стрелке
Andrei 🦉
Выложи простой пример на playground
heavycharged
heavycharged
https://play.golang.org/p/nCt8KCZyRHJ
heavycharged
20 строка
heavycharged
а, ну да, я же канал определяю на четкой структуре, а не на интерфейсе.
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Только сегодня слушал выпуск golangshow и там правильно было сказано : "методы с ресивером *t и для *t и для t ибо и * и t, а методы с ресивером t - это только для t ибо * нигде нету" - гениальная логика чтобы запомнить
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
https://play.golang.org/p/_4vag1uXgGf
Michael
а v может быть или не быть *
Slava
Slava
можно же и для *t вызывать методы с ресивером t
🎉
Чото не вижу в готуре как мне проставить умолчальный case в switch? В смысле када ни одно условие не подошло.
Slava
так ошибка же про то что у тебя ресивер нил
Slava
https://play.golang.org/p/-7ulsAS5ibW
Slava
не понимаю этого аргумента =)
Slava
если следовать той же логике, я мог бы парировать, что ты потом при вызове t.поле в методе - так же огребёшь панику
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
не понимаю этого аргумента =)
Аргумент в том, что если метод над *t - то это он в любом случае будет вызван, а если метод над t то он будет вызван только если ресивер не nil, иначе все с паникой упадёт
Slava
нууу, а как это мешает использовать ресиверы на t для *t? =)
Slava
проверил что не nil - вызвал
Slava
возможно там был какой-то контекст
heavycharged
ну вот кстати, если я не ошибаюсь, если мы сделаем buf := bytes.Buffer{}, то записать в него сможем. Если эта штука придет через интерфейс к нам, а мы сделаем buf.(bytes.Buffer).WriteString(), то у нас ничего не выйдет.
heavycharged
"но это не точно".
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
heavycharged
а не, все ок.
heavycharged
хз почему, но когда я тестил недавно пул, мне тут кто-то посоветовал в пул ложить буфер не ссылке, а по значению, а указатель. то потом при ассерте к bytes.Buffer{} я получил что метод определен на ссылке.
Anonymous
Нашел очень быстрый и удобный парсер JSON-а. Особенно полезен, если из нежно нужно всего одно или два поля прочитать:
https://github.com/tidwall/gjson
Quet
интересно парсер в нем это самописное или сгенерили из чего-то
Quet
ну плохо ( я понимаю когда такой отвратительно выглядящий код получается из всяких рагелей-бизонов
Evgeny
Подскажите, пожалуйста. Есть две функции, которые ничего не принимают и ничего не передают.
Необходимо запустить вторую функцию, если первая закончилась к примеру os.Exit(1).
Как это лучше оформить ?
Если что я ещё нубяра.
Slava
os.Exit прерывает выполнение программы
Michael
$continue$
всем привет. как создать массив из структуры. Т.е arr[MAX_SLOT][struct_name] (очень образно)
Roman
Michael
structObject := arr[i]
Michael
т.е. просто arr[i]
Michael
arr[i].FieldName
andrew
Небольшой оффтоп. Можете посоветовать хорошую читалку для PDF? На ELink
Artem
andrew
о, отлично, спасибо!
andrew
то что надо
Anonymous
гы ... больше косаря зелени... интересно, за что ... %)
andrew
за удобство, оно того стоит
andrew
большая часть тех. литературы в пдф
andrew
осталось решить вопрос с доставкой...
andrew
6 дюмов, маленький, Вопрос в принципе закрыт, я вроде сони и искал.
Michael 🌌
https://www.amazon.com/Carta-Ereader-Flexible-Screen-Bluetooth/dp/0285175270/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=ter000-20&linkId=58438ab46798bce04a6fe1d6f25e5492
Michael 🌌
Ну окей, закрыт так закрыт
andrew
всё равно спасибо :)
Антон
Всем привет. Пожалуйста, поясните на пальцах в двух словах, или же дайте хорошую статью на русском, которая обьяснит в чем разница между make и new. А то читаю сейчас eng источник и принципиальную разницу не совсем понял, из-за трудностей перевода.
Mikhail
Anonymous
Artem
просто new создает указатель на не композитные типы. new(chan int) создает *chan int, когда make(chan int) создает значение chan int
т.е. new возвращет значение &T{}, на сколько я понимаю разница только в том, что последняя делает это в куче, но память алоцируемая нулевая, а make алоцирует и инициализирует память и потому используется для создания мап, слайсов и каналов.
Антон
просто new создает указатель на не композитные типы. new(chan int) создает *chan int, когда make(chan int) создает значение chan int
т.е. new возвращет значение &T{}, на сколько я понимаю разница только в том, что последняя делает это в куче, но память алоцируемая нулевая, а make алоцирует и инициализирует память и потому используется для создания мап, слайсов и каналов.
ну как я понимаю, при make память выделяется и забивается нулями, а при new она просто выделяется по типу nil что ли, как бы есть память под структуру, но в ней пока вообще ничего нет, даже без нулевых значений. Так что ли
Artem