heavycharged
Короче, вдруг кому пригодится: { "Err expand": { "prefix": "err", "body": [ "if err != nil {", "\t$0", "}" ] } }
heavycharged
было бы ещё круто, если бы в функции/методы предлагались только аргументы с таким-же типом
Maksim (Ellrion)
heavycharged
потестить, говорят в чем-то даже лучше goland
Alexander
ну если только быстрее и ресурсов меньше жрет
Sebor▂▅▇█▓▒░
И беплатно)
Alexander
я вот только да, из последнего соображения голенд снес
Olga
Привет ) Для тех, кто хотел, но не смог к нам приехать - запись лекции Искандера Шарипова в Иннополисе "Оптимизация размера бинарников в Go" - https://youtu.be/HpriPuIfrGE
Мерль
https://github.com/octago/sflags
Спасибо за библиотеку, очень круто! Оказалось очень легко интегрировать в существущий проект, библиотека никуда не протекает абстракциями. Использование структуры в качестве хранилища резко упростило написание тестов и парсинг сложносочинённых флагов. Единственное чего не хватает — это возможности задать метаданные для флагов с помощью функциональных опций, чтобы не городить километровые теги с описаниями. Но в целом очень понравилось
Eldar
😧
Maxim
Слишком дёшево
Alexander
рустер детекдет
Władimir (Zae)
добрый день, а я в стракте могу как-то объявить какое должно быть значение у строки? типа как в тайпскрипте type SomeType struct { Value «OPEN» | «WPA» }
Илья
нет
Władimir (Zae)
вообще совсем никак?
Aleksandr
enum сэмулировать?
Maksim (Ellrion)
https://golang.org/ref/spec#Iota
и как iota ему поможет со строками?
kås
ну это скорее направление куда покопать, вдруг окажется что и строки не нужны
Władimir (Zae)
нужны
Илья
если хочется enum то нужно смотреть в сторону iota и генерации бойлерплейта для валидации https://github.com/alvaroloes/enumer
Władimir (Zae)
а как мне сделать тип с первым символом цифрой?
Władimir (Zae)
Władimir (Zae)
ругается если делаю так
Aleksandr
на что ругается?
kås
на пустую строку выше?
Władimir (Zae)
Władimir (Zae)
видимо как то эскейпнуть надо название проперти
Илья
Identifiers name program entities such as variables and types. An identifier is a sequence of one or more letters and digits. The first character in an identifier must be a letter.
Илья
https://golang.org/ref/spec
Maksim (Ellrion)
а как мне сделать тип с первым символом цифрой?
никак, первый символ идентификатора должен быть буквой
Władimir (Zae)
ок, спасибо
Alexander
Ребят, подскажите, пожалуйста. Есть go-сервер, который на каждое подключение создает горутину, которая начинает очень активно общаться с подключенным клиентом. Если подключится небольшое количество клиентов, такое ощущение, что их обильное общение полностью "забивает" tcp канал общения и другие клиенты либо просто не могут подключиться либо подключаются очень долго. Как-будто listener.Accept() завис навсегда. Если из горутин убрать логику общения, оставив просто бесконечный цикл, то никаких проблем. Могут подключиться спокойно тысячи клиентов Как такие вещи разруливаются? Или это как бы норма и сокет внутри как очередь устроен и если горутины забивают очередь то сами и виноваты?
kås
код работы с каналами не помешал бы
Alexander
go-Каналов нет
Alexander
висит бесконечный цикл с listener.Accept, который внутри себя запускает горутины на каждое подключение
Alexander
нет, не используется
Alexander
в каждой горутие, которая обрабатывает канал, делается просто binary.Read/Write из коннекшена net.Conn, полученного из accept
Władimir (Zae)
никто не сталкивался с проблемой что Go при записи в файл по темплейту добавляет символы рандомно из темплейта? например у меня был темплейт WIFI1SSID=ssidexample WIFI1PASS=password login=admin password=password через какое то время в этом файле начали появляться символы S admin =
Aleksandr
отключи random template writing - фича такая
Dmitry
в каждой горутие, которая обрабатывает канал, делается просто binary.Read/Write из коннекшена net.Conn, полученного из accept
получается что 1000 горутин одновременно деллают binary.Read/Write в один коннекшон
Władimir (Zae)
ok
Aleksandr
мы поняли друг друга
Dmitry
сокет же один
Alexander
Ну блин, nginx же как-то работает с кучей запросов на один сокет
Kirill
мы поняли друг друга
Мне аж интересно стало што я пропустил
Kirill
Сколько там у нас семафоров на канал? Четыре?
Alexander
сокет же один
как же один, когда говорят что *на каждое подключение* создается горутина
Kirill
используйте каналы
Коллега, после таких советов люди спустя первые пару дней разработки на го пойдут и радостно начнут рассказывать, что нода жрёт меньше ресурсов и работает быстрее
Alexander
я бы глянул очереди на tcp-соединении
Alexander
netstat/ss в помощь. ну и повтыкал во всякие iostat/vmstat чем процесс занят
Anton
коллеги, у всем известного jmoiron/sqlx при возвращении данных из таблиц с неважно-каким-join-ом, для null значений из joined таблиц, один чёрт создается пустая структура.. может быть, кто-нибудь уже разбирался с этим вопросом и знает как быстро решить проблему?
Alexander
используйте каналы
И как тут помогут каналы? Один канал, который последовательно обрабатывает все Writes и решает в какой conn ответить?
Kirill
И как тут помогут каналы? Один канал, который последовательно обрабатывает все Writes и решает в какой conn ответить?
Так, что всё будет настолько течь и настолько медленно, что уже будет неважно
Alexander
netstat/ss в помощь. ну и повтыкал во всякие iostat/vmstat чем процесс занят
попробую, есть подозрение, что просто тупо очередь сокета забивается, но вроде как на подключения же отдельная очередь, а уже подключившиеся имеют свои сокет очереди
Alexander
Единственное, что заметил, если в горутинах сделать небольшой таймаут, хоть на 10мс, то ситуация прямо сильно лучше
Alexander
те, кто подключился - не тормозят, но если в их цикле сделать таймаут - то новые подключения принимаются охотнее
Alexander
Интересно, я не настоящий сварщик, а сколько ядер на машине?
Alexander
8, GOMAXPROCS установлен тоже на 8
Kirill
8, GOMAXPROCS установлен тоже на 8
А ты тачку тюнил-то?
Alexander
но в целом болшой разницы я не заметил, что 8 стоит, что дефолтный 1
Aliaksandr
те, кто подключился - не тормозят, но если в их цикле сделать таймаут - то новые подключения принимаются охотнее
Скорее всего, не хватает пропускной способности сети. Посмотрите что показывает netstat, когда начинаются тормоза
Alexander
тачка - обычный макос
Alexander
Можно в Го сделать аффинити горутины которая принимает соединения на отдельное ядро? А остальные горутины на другие ядра повесить?
Kirill
А ты тачку тюнил-то?
Сорри, народ, если вы спрашивали уже
Kirill
тачка - обычный макос
В проде будет макос?
Alexander
Ну по сетевому стеку в макоси я точно не шарю, но в линухе из коробки он сильно не тюненный под нагрузку
Alexander
Думаю в макоси так же
Petr
Можно почитать про бсд, но в маке из коробки все нормально с сетью
Alexander
на проде не будет макос, это вообще скажем так - pet-поделка