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 сэмулировать?
kås
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
Władimir (Zae)
ок, спасибо
Slava
Alexander
Ребят, подскажите, пожалуйста. Есть go-сервер, который на каждое подключение создает горутину, которая начинает очень активно общаться с подключенным клиентом. Если подключится небольшое количество клиентов, такое ощущение, что их обильное общение полностью "забивает" tcp канал общения и другие клиенты либо просто не могут подключиться либо подключаются очень долго. Как-будто listener.Accept() завис навсегда. Если из горутин убрать логику общения, оставив просто бесконечный цикл, то никаких проблем. Могут подключиться спокойно тысячи клиентов
Как такие вещи разруливаются?
Или это как бы норма и сокет внутри как очередь устроен и если горутины забивают очередь то сами и виноваты?
kås
код работы с каналами не помешал бы
Alexander
go-Каналов нет
Alexander
висит бесконечный цикл с listener.Accept, который внутри себя запускает горутины на каждое подключение
Dmitry
Alexander
нет, не используется
Alexander
в каждой горутие, которая обрабатывает канал, делается просто binary.Read/Write из коннекшена net.Conn, полученного из accept
Władimir (Zae)
никто не сталкивался с проблемой что Go при записи в файл по темплейту добавляет символы рандомно из темплейта? например у меня был темплейт
WIFI1SSID=ssidexample
WIFI1PASS=password
login=admin
password=password
через какое то время в этом файле начали появляться символы
S
admin
=
Kirill
Aleksandr
отключи random template writing - фича такая
Dmitry
Władimir (Zae)
ok
Kirill
Aleksandr
мы поняли друг друга
Alexander
Dmitry
сокет же один
Alexander
Ну блин, nginx же как-то работает с кучей запросов на один сокет
Dmitry
Kirill
Kirill
Сколько там у нас семафоров на канал? Четыре?
Alexander
сокет же один
как же один, когда говорят что *на каждое подключение* создается горутина
Sebor▂▅▇█▓▒░
Kirill
используйте каналы
Коллега, после таких советов люди спустя первые пару дней разработки на го пойдут и радостно начнут рассказывать, что нода жрёт меньше ресурсов и работает быстрее
Alexander
я бы глянул очереди на tcp-соединении
Alexander
netstat/ss в помощь. ну и повтыкал во всякие iostat/vmstat чем процесс занят
Anton
коллеги,
у всем известного jmoiron/sqlx при возвращении данных из таблиц с неважно-каким-join-ом, для null значений из joined таблиц, один чёрт создается пустая структура..
может быть, кто-нибудь уже разбирался с этим вопросом и знает как быстро решить проблему?
Alexander
используйте каналы
И как тут помогут каналы? Один канал, который последовательно обрабатывает все Writes и решает в какой conn ответить?
Kirill
Alexander
Единственное, что заметил, если в горутинах сделать небольшой таймаут, хоть на 10мс, то ситуация прямо сильно лучше
Kirill
Alexander
Alexander
те, кто подключился - не тормозят, но если в их цикле сделать таймаут - то новые подключения принимаются охотнее
Alexander
Интересно, я не настоящий сварщик, а сколько ядер на машине?
Alexander
8, GOMAXPROCS установлен тоже на 8
Kirill
Alexander
но в целом болшой разницы я не заметил, что 8 стоит, что дефолтный 1
Alexander
тачка - обычный макос
Alexander
Можно в Го сделать аффинити горутины которая принимает соединения на отдельное ядро? А остальные горутины на другие ядра повесить?
Alexander
Ну по сетевому стеку в макоси я точно не шарю, но в линухе из коробки он сильно не тюненный под нагрузку
Alexander
Думаю в макоси так же
Petr
Можно почитать про бсд, но в маке из коробки все нормально с сетью
Alexander
на проде не будет макос, это вообще скажем так - pet-поделка