heavycharged
дело в кавычках, потому что user - зарезервированный keyword
heavycharged
https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
heavycharged
так вы его эксэйпите, давая базе точно понять, что речь идет о колонке/столбце
Alexandr
Скажите, плиз, а как найти разность межды time.Time ?
Wingman
start := tm1.Unix() diffSeconds := 0; for { diffSeconds++ if start >= tm2.Unix() { break; } }
Wingman
:)))))
Roman
канал не закрыл
Eldar
подскажите плз, есть тип type Msg gonats.Msg как его заюзать, если входным параметром должен быть именно gonats.Msg, но в данном пакете я библиотеку gonats не использую?
Artem
var a Msg send(a.Msg)
Eldar
хочу вот так: conn.Subscribe("subj1", func(msg *sdk.Msg) {})
Eldar
а просит вот так: conn.Subscribe(«subj1», func(msg *gonats.Msg) {
Denis
type Msg gonats.Msg а зачем ты так делаешь?
Eldar
что бы в проекте, который использует мой пакет sdk можно было использовать тип gonats.Msg, но судя по всему так нельзя
Denis
в любом случае ты можешь либо явно преобразоваться в стиле msg.(*gonats.Msg) и передать так; второй вариант использовать алиас type Msg = gonats.Msg
Cat
type Msg gonats.Msg а зачем ты так делаешь?
хочет вынести внешние зависимости в отдельный слой
Denis
type Msg = gonats.Msg попробуй так вместо type Msg gonats.Msg сработает, но это странная практика
Eldar
спасибо, сработало. а почему странная? )
Denis
ну а в чем смысл? ты же ничего не вынес. ну обновилась библиотека gonuts, и твоя структура тоже обновится
Denis
почему сразу не писать gonuts.Msg я пока не понял
Eldar
в основном проекте не используется либа gonuts
Denis
тогда уж лучше сделать свою структуру, продублировать поля gonuts.Msg, и потом внутри твоего пакета преобразовываться
Eldar
она используется в sdk
Denis
в основном проекте не используется либа gonuts
ну я понял, да, но ты ведь не исправил ничего. type Msg = gonats.Msg вот это на самом деле неявно просто везде где используется Msg проставит gonats.Msg :)
Eldar
дублирование тащит за собой большую кучу типов…
Denis
ну свою структуру ты контролируешь. обновилась структура gonuts - ты может быть логику преобразования в gonuts поменял, а в остальном коде все осталось по- прежнему
Cat
> контролируешь до момента, пока всё не сломается (== пока не обновится gonats.Msg)
Cat
т.е. ничего не меняется
Denis
ммм, не совсем понял. смотри, допустим gonuts.Msg это структура в которой есть поле Text
Denis
я делаю свою структуру и в ней такое же поле. пишу логику которая из моей структуры просто создает gonuts. везде использую свою, так?
Cat
ммм, не совсем понял. смотри, допустим gonuts.Msg это структура в которой есть поле Text
а если в ней ещё 30 полей? которые в свою очередь составные
Denis
теперь gonuts.Msg меняет поле Text на Content. я свою структуру не трогаю, меняю только преобразование(подставляю Text в Content)
Denis
а если я использую напрямую gonuts то я должен бегать по всему коду и все править
Cat
теперь gonuts.Msg меняет поле Text на Content. я свою структуру не трогаю, меняю только преобразование(подставляю Text в Content)
ну так и это работает ровно до того момента, пока интерфейс gonats.Msg не поменяется
Denis
?
Denis
да, но это лучше чем править весь клиентский код
Cat
так а как тебе поможет var Msg = gonuts.Msg
ну ты же предложил переимплементировать внутренности структуры
Cat
дублирование тащит за собой большую кучу типов…
Eldar
да, там составные типы
Denis
так я предложил это вместо var Msg = gonuts.Msg. такой-то подход вообще ничего не дает в целом)
Cat
да, но это лучше чем править весь клиентский код
в зависимости от того, что и где и как часто используется
Denis
ну, в этом конкретном случае это хорошее дублирование, не надо его обижать) а если структура большая и никак ее незадублировать или это слишком сложно, тогда я никаких профитов от var Msg= не вижу
Cat
ну как же, очень простой профит, если зафиксировать версию пакета, — не нужно делать бойлерплейт
Cat
а если версия обновится, то тут в любом случае проблемы
Denis
хм, я так и не понял, почему бы просто не использовать везде прямо gonuts.Msg, что дает такое присвоение типа?)
Cat
про конвертирование из одного в другое я согласен, так правильнее, и в случае нужды замены gonats на что-лбо другое, сэкономит кучу времени и нервов
Cat
нормальным также будет просто сделать враппер: type CustomMsg struct { inner gonats.Msg }
Cat
и дописать к нему нужный внешний интерфейс
Denis
ну да, так тоже ок
Alexandr
коллеги, а есть ли способ как то определить дефолтное возвращаемое значение. func GetNeedAndCurrentCtr(offerId int) (float32, float32, bool) для этой функции стандартный ответ есть, и она в своем теле может из разных мест его отправить по условиям 0.0, 0.0, false
Alexandr
можно ли как то засунуть набор значений эти засунуть в переменную или еще как, чтоб не писать в разных местах функции не писать заново этот ответ деволтный
🏁Александр
https://play.golang.org/p/RpWfkJ_YZZ-
Alexandr
func GetNeedAndCurrentCtr(offerId int) (anyVar float32, anyVarTwo float32, flag bool) { return }
этот вариант тоже рассматривал и так понимаю оно для этого и нужно
🏁Александр
это так называемый "тихий возврат" 🙂
Alexandr
ну подумал может опытные коллеги, что то другое нашли
🏁Александр
для маленьких функций, что бы не возращать полотно каждый раз
Alexandr
для маленьких функций, что бы не возращать полотно каждый раз
если я нигде не задам значения этих переменных, то вернуться их дефолтные значения же?
Alexandr
да
спасибо!
🏁Александр
при пустом return вернутся дефолтные
🏁Александр
посмотрите пример на плей
Cat
ну подумал может опытные коллеги, что то другое нашли
func() { if { ... return a, b, c } else if { ... return d, e, f } else { ... return g, h, i } return default_a, default_b, default_c }
Cat
?
🏁Александр
оно хотел избежать тройного ретурна
Cat
а, ок
Cat
я думал смысл в кастомных дефолтных значениях
🏁Александр
спасибо!
только вы имейте введу, там ретурт либо ничего либо все
🏁Александр
если у вас возращается 1 параметр из трех, вы делаете пустой ретурн и до этого меняете эту переменную
🏁Александр
anyVar = 2 return
🏁Александр
а не
🏁Александр
return 2
Roman
внимание! вопрос знатокам. если одна горутина успешно прочитала из канала и продолжила выполнение на машине M1, означает ли это, что горутина-отправитель тоже продолжает исполняться на машине M2, т.е. не находится в очереди Px? Канал небуферизован.
Artem
Машине?