Maks
там из за того что x определен в возвращаемом значении функции
Maks
мы его в деффере переписываем
Maks
инкрементим
Maks
наверное в случае когда сигнатурой определено возвращаемое значение - у него скоуп больше и на него ссылка остается одна и та же, что у дефера что у того кто этот метод вызывает.
Maks
примерно так
Maks
получается после ретурна. типо как файнали
Maks
не прочитал что ты написал тут по этому сам додумывал а оказалось вот он твой ответ на наш вопрос)
Vladislav
тааак, по идеи же у меня структура MyCat должна расшираться за счет Cat и как бы «передавать» поля. Почему мне надо заполнять с явным указанием?
Как в го в генерике у типа указать констраинт, чтобы можно было юзать операторы сравнения? < Или >
Alexander
https://go.dev/tour/flowcontrol/12 - первое предложение. одно предложение из официального источника
Alexander
первое
Maks
Ну только я просто свои мысли написал)))
Maks
https://go.dev/tour/flowcontrol/12 - первое предложение. одно предложение из официального источника
Ок. Значит до. Или типо во время. Так то оно так, но такой ответ не объясняет почему дефер не может менять значение которое мы возвращаем, если оно не является именованным типом в сигнатуре)
Alexander
Ок. Значит до. Или типо во время. Так то оно так, но такой ответ не объясняет почему дефер не может менять значение которое мы возвращаем, если оно не является именованным типом в сигнатуре)
А если нам прикинуть что не именованная выходная переменная имеет адрес, до которого defer не может достучаться. А для именнованной может
Maks
да там уже достаточно вот этого: Deferred anonymous functions may access and modify the surrounding function’s named return parameters.
Vladislav
Go check out my Go code at https://play.golang.org/p/m4Um1XI6Pv9.go в чем может быть проблема?
Alexander
я только одно могу предлположить: в случае именованного возврата оно считается как ссылка из которой надо достать значение, а в случае просто локальной переменной заранее вычисляется значение, а потом делается дефер вызов
Maks
но не
Maks
хуйня
Alexander
да не, типа аргументы вычисляются сразу, что как бы логично
Alexander
хотя конечно, до кого-то может не дойти
Alexander
одно радует: нормальный человек так писать код не будет
Alexander
даже такой вариант возвращает 5, так что моя концепция подтверждается: func foo()int{ a := 5 b := &a defer func(){ a=3 }() return *b }
Alexander
хотя... я кстати кейс могу предусмотреть: func getTaskIDs(db *sql.DB, ...) (ids []int, err error){ ... rows, err := db.Query(...) if err != nil{...} defer func(){err = rows.Close()}() ... }
Alexander
вот последняя строка запишет нам ошибку закрытия ровсов в ответ. а так мы можем что другое закрывать
Vladislav
comparable поддерживает == и !=
да, увидел, вообще странно конечно
Vladislav
нашел вот такое https://pkg.go.dev/golang.org/x/exp/constraints#Ordered
Andrey
Только не забывай, что это экспериментальная репа
Maks
https://www.youtube.com/watch?v=ZXx3cSFdmZ4
Maks
челы бешенные
Anonymous
мужики
Anonymous
дженерики в прод кто-то юзал?
Anonymous
как оно?
Herman
вот мне кто-то выше втирал
Herman
аряря женерики
Herman
дженерики в прод кто-то юзал?
на го 1.18 в проде опасно
Anonymous
лучше не юзать?
Anonymous
ок
Herman
линтеры отвалились как минимум
Herman
надо ждать пока починят
Herman
надо ждать пока починят
ну или руками в конфиге писать, чтобы использовало go 1.17
Anonymous
еще такой вопросик
Anonymous
реально ли докер юзать на винде без всл?
Anonymous
винда сборки старой, а обновлять не хочется
Anonymous
типо в компонентах отсутсвует подсистема линуха
Andrey
Жди лучше 1.18.1, мало ли какое гавно всплывет
Anonymous
страх есть
Alexander
Жди лучше 1.18.1, мало ли какое гавно всплывет
Я тоже жду, меня скорее смущает потенциальная недооптимизированность дженериков
Anonymous
такое ощущение что у меня проект с ними медленнее работает
Anonymous
хз мб паранойя
Anonymous
мб я нагавнокодил
Andrey
Я вот не копал глубоко, а они какую стратегию выбрали поитогу: генерить их в реалтайме или на этапе компиляции?
Andrey
компиляция
Тогда странно, что просадки. Надо ждать некст версии
Anonymous
как на зло сейчас еще читаю, что го 18 медленнее го 17
Anonymous
не хочется код дублировать
Anonymous
https://github.com/golang/go/issues/49569
Herman
ну так понятное дело компайл тайм замедитлся
Herman
он ж ходит смотрит эти дженерики
🅞leksiy
линтеры отвалились как минимум
Что за линтеры? У меня с ними все ок ещё с первой бетки
🅞leksiy
А обновить?
Herman
https://github.com/golangci/golangci-lint/issues/2649
Andrey
https://github.com/golang/go/issues/49569
Ты ошибся. Там же про компиляцию пишут, а не работу
Herman
А обновить?
чинят вродя еще
Anonymous
а
Anonymous
ну мб
Anonymous
я в страхе сижу
Anonymous
задеплоил код с дженерикми)))
Herman
чинят вродя еще
я в конфиге банхнув go:1.17 и норм
Andrey
Логично в время компиляции сильно вырастет. С++ тот же как пример подходит. Написал дженерик, ждешь сразу дольше
Anonymous
как же много на гите про дженериков плохого написано
Anonymous
зачем я это читаю)))
Anonymous
надо было сразу прочитать, а не писать говнокод(((((