heavycharged
дело в кавычках, потому что user - зарезервированный keyword
heavycharged
https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
heavycharged
так вы его эксэйпите, давая базе точно понять, что речь идет о колонке/столбце
Anonymous
Alexandr
Скажите, плиз, а как найти разность межды time.Time ?
Maks
Alexandr
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
Denis
type Msg = gonats.Msg попробуй так вместо type Msg gonats.Msg сработает, но это странная практика
Eldar
спасибо, сработало. а почему странная? )
Denis
ну а в чем смысл? ты же ничего не вынес. ну обновилась библиотека gonuts, и твоя структура тоже обновится
Denis
почему сразу не писать gonuts.Msg я пока не понял
Eldar
в основном проекте не используется либа gonuts
Denis
тогда уж лучше сделать свою структуру, продублировать поля gonuts.Msg, и потом внутри твоего пакета преобразовываться
Eldar
она используется в sdk
Cat
Eldar
дублирование тащит за собой большую кучу типов…
Denis
ну свою структуру ты контролируешь. обновилась структура gonuts - ты может быть логику преобразования в gonuts поменял, а в остальном коде все осталось по- прежнему
Cat
> контролируешь
до момента, пока всё не сломается (== пока не обновится gonats.Msg)
Cat
т.е. ничего не меняется
Denis
ммм, не совсем понял. смотри, допустим gonuts.Msg это структура в которой есть поле Text
Denis
я делаю свою структуру и в ней такое же поле. пишу логику которая из моей структуры просто создает gonuts. везде использую свою, так?
Cat
Denis
теперь gonuts.Msg меняет поле Text на Content. я свою структуру не трогаю, меняю только преобразование(подставляю Text в Content)
Denis
а если я использую напрямую gonuts то я должен бегать по всему коду и все править
Cat
Denis
Denis
?
Cat
Denis
да, но это лучше чем править весь клиентский код
Cat
дублирование тащит за собой большую кучу типов…
Eldar
да, там составные типы
Denis
так я предложил это вместо var Msg = gonuts.Msg. такой-то подход вообще ничего не дает в целом)
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
🏁Александр
это так называемый "тихий возврат" 🙂
Alexandr
ну подумал может опытные коллеги, что то другое нашли
🏁Александр
для маленьких функций, что бы не возращать полотно каждый раз
🏁Александр
Alexandr
🏁Александр
при пустом return вернутся дефолтные
🏁Александр
посмотрите пример на плей
🏁Александр
Cat
?
🏁Александр
оно хотел избежать тройного ретурна
Cat
а, ок
Cat
я думал смысл в кастомных дефолтных значениях
🏁Александр
спасибо!
только вы имейте введу, там ретурт либо ничего либо все
🏁Александр
если у вас возращается 1 параметр из трех, вы делаете пустой ретурн и до этого меняете эту переменную
🏁Александр
anyVar = 2
return
🏁Александр
а не
🏁Александр
return 2
Roman
внимание! вопрос знатокам. если одна горутина успешно прочитала из канала и продолжила выполнение на машине M1, означает ли это, что горутина-отправитель тоже продолжает исполняться на машине M2, т.е. не находится в очереди Px? Канал небуферизован.
Artem
Машине?