Oleh
накопливалось
Oleh
снимай профиль, смотри где накодил мусора, клиент не кеширует данные
а конекты? там же вроде можно переиспользовать конекты, а мне это не нужно
Илья
а какой утилитой смотреть?
https://blog.golang.org/profiling-go-programs
Slach
указатель на структуру
о! спасибо дорогой человек а тыкните носом где это написано? ну то есть, почему указатель на структуру имплементирует интерфейс, а сама структура нет?
Илья
если метод с * - то он только для указателя
Hamidumi
func (c *Conn) SetLogger(l Logger) { c.logger = l }
Slach
func (c *Conn) SetLogger(l Logger) { c.logger = l }
погодите l Logger это интерфейс c - это указатель c.logger это что? с.logger это ж поскольку структура просто отрезолвленый указатель т.е. все равно что мы бы записали *c.logger ? нет? я всегда думал что в golang это сделали чтобы лишних звездочек не писать и это синтаксический сахар
I
https://stackoverflow.com/a/13533822/6119618
I
strings.Quote ?
нету такого
Nikita
I
strconv.Quote
благодарю
Slach
https://stackoverflow.com/a/13533822/6119618
ну так я о чем??? func (c *Conn) SetLogger(l Logger) { // c.logger это (*c).logger элемент структуры Conn // l это имплементация интерфейса c.logger = l } я не понимаю, почему если аргумент функции это интерфейс, но при этом функция это метод для структуры которая вроде как "указатель" то реализацию интерфейса надо передавать через указатель? вот об этом где написано?
Michael
what was that?
Илья
https://tour.golang.org/methods/6
Slach
ты не понял, проблема в твоей реализации logger
я действительно не понимаю ;) пожалуйста поясни, это очень важно для меня, потому что такие вещи в языке, которым пользуешься надо знать ту ссылку которую ты привел я читал там тоже самое там говорится про то что если v *Type v.Func() интерпретируется как (*v).Func() pointer но я то про интерфейс а не про указатель на тип я еще раз спрашиваю, объясните мне если у меня есть функция func(c *MyStruct) SetInterfacer(i MyInterface) { c.interfacer = i } почему если у меня есть какая то имплементация MyInterface в виде экземпляра структуры (не указателя) я должен в SetInterfacer передавать именно указатель на структуру? почему она не может быть просто аллоцирована на стеке если даже у меня c это pointer receiver ?
Илья
не знаю как тебе более абстрактно это пояснить :)
Илья
еще раз, проблема не в SetLogger, а в Logger, если ты метод без ссылки на ресивер объявишь (не мутирующий), то сама структура будет реализовывать интерфейс
Slach
не знаю как тебе более абстрактно это пояснить :)
вроде нагуглил https://medium.com/@agileseeker/go-interfaces-pointers-4d1d98d5c9c6 так, щас осталось переварить вот кажется ключевая фраза статьи the parameter type (a value or pointer) passed to a method/function that accepts an interface should match the implementing object’s method receiver короче, я так понимаю что поскольку у меня func (c *MyType) funcName()... pointer receiver и я передаю интерфейс в качестве параметра то я должен передавать его через ссылку если будет просто func (c MyType) funcName() то можно передавать и значени и через ссылку и она будет dereference для ссылки сама делать это все нужно для того чтобы когда я вызывал c.interfacer.InterfaceMethod() у меня правильно делалось dereference для с.interfacer? так?
Slach
короче я понял окончательно если имплементация передаваемой реализации интерфейса сделана as value func (c Type) funcName() то в функцию которая на вход принимает интерфейс я передаю саму структуру или указатель на структуру пофигу а если имплементация интерфейса сделана as pointer func (c *Type) funcName тогда я эту имплементацию интерфейса как pointer и должен передавать и уже не важно что там в у меня в мутируемом объекте func (d *ReceiverType) SetInferfacer(newValue MyInterface) { } или func (d ReceiverType) SetInferfacer(newValue MyInterface) { }
Anonymous
Воу воу откуда все бегут?
Michael 🌌
Лично я - из ноды 😅
Oleg
Воу воу откуда все бегут?
кто-то пропиарил как обычно)
Vasily
в чате моего курса дали ссылку
Konstantin
Gogland оказывается уже релизнулся и стал платным. Какая есть нормальная альтернатива бесплатная?
🍗
Atom, liteide , даже видел плагин для Notepad++ )
Alexander
Есть плагин для Idea
Konstantin
Atom дрисня дикая. Раз под Notepad++ есть, надо будет глянуть на Sublime Text, может туда просто пересяду, ибо лишь временами нужно что-то отредактировать и подебажить.
Konstantin
В vscode хороший дебагер.
Надо будет попробовать, да.
Anonymous
К слову, начал пересаживаться на емакс. Люди, тут все реально руками писать приходится
Vladislav
Почему емакс, а не вим? Для вим, вроде, хороший плагин.
Anonymous
Почему емакс, а не вим? Для вим, вроде, хороший плагин.
Вим такая сложная штука. Вроде все удобно, но на хоткеях быстрее и привычней.
Anonymous
А плагин сейчас, на высоте
Максим
Gogland оказывается уже релизнулся и стал платным. Какая есть нормальная альтернатива бесплатная?
В чём проблема использовать сервер лицензий? В сети уже есть. Сам находил, вроде работают без нареканий. Если из соображений проверок со стороны органа ответственного за пиратство, то почти все редакторы имеют ограничение на коммерческое использование. Sublime не исключение
Vladislav
Так купи.
Максим
Notepad++ бесплатен, да и только. LiteIde тоже, судя по всему
Konstantin
Так купи.
Ради пары домашних проектов тратиться на лицензию? Нахуй оно надо.
Vladimir
Ради пары домашних проектов тратиться на лицензию? Нахуй оно надо.
Если оно опенсорс, запроси опенсорс лицензию
Максим
А в чем проблема купить?
Нет проблем, просто человеку нравилось, что она бесплатна
Konstantin
Если оно опенсорс, запроси опенсорс лицензию
Насколько я знаю - для личного использования у jetbrains'ов все равно нужно покупать лицензии. Бесплатные версии есть у IDEA и PyCharm.
Vladimir
Насколько я знаю - для личного использования у jetbrains'ов все равно нужно покупать лицензии. Бесплатные версии есть у IDEA и PyCharm.
Если опенсорс софт то ее могут выдать вроде как. А у идее плагин на го ставится и получается тот же goland
Konstantin
Он там один, от jetbrains
Еще до того, как ребята из дб делали свой уже сторонние ребята делали свой плагин.
Vladimir
Еще до того, как ребята из дб делали свой уже сторонние ребята делали свой плагин.
Но кажется в идее сейчас доступен ровно один плагин, от jetbrains
Andrew
Приветствую! Подскажите, почему обязательно нужно что нибудь послать в канал, чтобы тесты отработали?
Andrew
Andrew
Andrew
По моему мнению, defer Close должен закрыть канал, и горутина завершится. Однако, это все равно не нравится флагу -race при запуске тестов
Anonymous
Привет. Ребят можете подсказать фреймворк чисто по работе с api. Сокеты, аутентификация, сервисы. На клиенте react
Michael
gramework
Andrew
Как же дефер вызовется, если функция на канале заблокировалась?
Где заблокировалась? Внутри горутины разве что. Ну и что?
Slava
Какой горутины? Внутри функции которую ты в exec передаёшь
Andrew
O_o
Andrew
У меня тело функции пустое
Andrew
где блокировка?
Slava
Извиняюсь, не досмотрел до конца
Slava
А что за ошибка вываливается?
Oleh
снимай профиль, смотри где накодил мусора, клиент не кеширует данные
https://golang.org/src/net/http/transport.go смотри 60 строку // By default, Transport caches connections for future re-use. // This may leave many open connections when accessing many hosts. // This behavior can be managed using Transport's CloseIdleConnections method // and the MaxIdleConnsPerHost and DisableKeepAlives fields.
Andrew
А что за ошибка вываливается?
Race detector говорит, что запись ch main.go:8 из теста2 конфликтует чтением main.go:11 из теста1, который уже завершился.
Slava
А, у тебя канал глобальный
Andrew
И это правильно, однако, мне не понятно, почему ошибка пропадает, если послать в канал значение (main_test.go:9)
Илья
https://golang.org/src/net/http/transport.go смотри 60 строку // By default, Transport caches connections for future re-use. // This may leave many open connections when accessing many hosts. // This behavior can be managed using Transport's CloseIdleConnections method // and the MaxIdleConnsPerHost and DisableKeepAlives fields.
так профиль то снял, на два гига там не должно натекать (на опыте написания грабберов) ни разу на это не натыкался, ищи утечки у себя(не закрытые тела или глобальные мапы)