Anonymous
перенос var blah Blah в цикл фиксит, все норм в массив добавляется
Васильев Виктор
Oleh
Чем отличаются эти массивы?
Из определения слайсов в гоу туре можно развеить все непонятки: Slices are like references to arrays A slice does not store any data, it just describes a section of an underlying array. https://tour.golang.org/moretypes/8 Cлайс сам по себе хранит ссылки на области памяти, где лежат значения. Если сделать []*Obj то тогда получается поинтер на поинтер, на практики буквально никогда не нужно юзать []*Obj и всегда можно удалить указатель из объявления и получать тот же самый результат
Anonymous
"SELECT * FROM Clients WHERE LastConnectionTime >= $1", GetCurrentTime().Add(-(time.Minute * 15))
Anonymous
Это норм? Не зашкварно?))
🏁Александр
загквар :)
🏁Александр
а если на mysql время не совпадает с приложением?
🏁Александр
(или какой у вас сервер)
🏁Александр
сделайте целиком на sql
🏁Александр
там тоже есть функции работы с датой
Anonymous
Бд просто рядом с бинарником пока
Anonymous
а если на mysql время не совпадает с приложением?
И как его синхронизировать? Юзать timestamp?
Alexey
Митап в Москве вечером 14-ого мая: https://golang-moscow.timepad.ru/event/720881/
Pawel
Сильное заявление, предоставлять аргументы я конечно же не буду. Вы пробовали писать бек этого незаконченного и сырого graphql?
Никаких там особо сложностей с реализацие под Го нет. Ну и да, хипсторам нравится, проще с ними договориться на чекпойнтах. GQL (на чтение, с мутациями сложнее) - писечка. Все сущности лежат по кучкам - контроллер+VM, и друг про друга не знают. А сбоку прикручен суперклей, позволяющий достать ровно то, что надо, в один запрос к серверу, да еще и к БД запросы сбатчить. Без GQL - либо делаем под каждый скрин по API-шке и VM-ке чтобы за раз все нужное достать - это боль и копипаста. Либо включаем режим "мне вообще похую на перформанс, плюс я ненавижу фронтендеров", и делаем канонический REST. Правда, я не видел нигде UI, сделанный поверх канонического REST API - видимо это физически невозможно, т.к. слабоумных фанатиков REST предостаточно.
Cat
> Правда, я не видел нигде UI, сделанный поверх канонического REST API - видимо это физически невозможно Одно "сильное заявление" поверх другого
Cat
ну, не видел — твоя проблема :)
GG
Как это лучше делать? :/
Я сталкивался с похожим. В redis есть фича при создании записи указывать ttl. Они автоматом экспарятся. При новом запросе на сервер просто заново создавал запись с id в ключе. И когда надо было собрать живых — просто выбирал всё записи.
GG
Но это если есть возможность юзать redis.
Dmitry
Но это если есть возможность юзать redis.
В монге тоже такая возможность есть
Nurzhan
Вопрос 1 Север общается с клиентом. Как лучше присваивать статус оффлайн? Типа если клиент не обращается к северу N времени то сервер пишет в бд статус оффлайн. Или чтобы клиент сам информировал сервер об уходе в оффлайн? Вопрос 2 Нужно вывести статистику кто онлайн кто нет Надо вытаскивать из бд все структуры клиентов и циклом проходить? Это же дофига ресурсов займет если бд большая
IMHO 1) наверное имеет смысл делать и так, и так: пользователь может просто закрыть выкладку и т.д.; а может ещё разлогиниться (если только 1 сессия) 2) у редиса вроде есть ttl callback или какая то нотификация (это сказал быстрый гуглеж) или можно попробовать использовать heap, и сортировать по последнему времени активности + 15 мин. например ; и т.д. + завести счётчик количества онлайн пользователей
Nazar
Так на серваке можно отловить когда клиент подключился и когда отключился, с тем же сокет ио
Anonymous
товарищи. как в монгоколлекцию запихнуть массив структур?
Denis
товарищи. как в монгоколлекцию запихнуть массив структур?
если каждая структура - отдельный документ, то docs := []SomeThing{} collecrtion.Insert(docs...)
Anonymous
если каждая структура - отдельный документ, то docs := []SomeThing{} collecrtion.Insert(docs...)
да, проблема в том, что он в ответ на это говорит cannot use list (type []SomeThing) as type []interface {} in argument to collection.Insert
Denis
хм, покажи код как ты вставляешь
Заур
Мож адрес передать надо?
Заур
Интерфейсы по ссылке передаются
Anonymous
Мож адрес передать надо?
Нет, там жеж написано в ошибке, что он interface хочет, а не мой тип
Заур
Под интерфейс все попадает
Anonymous
вот тут похожая фигня https://stackoverflow.com/questions/12990338/cannot-convert-string-to-interface
Anonymous
Под интерфейс все попадает
тоже так думал до сего момента
Заур
Попробуй .insert(&something)
Anonymous
Попробуй .insert(&something)
cannot use list (type *[]SomeThing) as type []interface {} in argument to collection.Insert
Anonymous
тип "ссылки" тоже ему не подходит
Заур
Ааа, там аррай в интерфейсе 😀
Заур
Вернее интерфейс в аррай
Denis
кстати да. слайс структур нельзя ведь использовать как слайс interface{}
Anonymous
вот я и о том же. Но перспектива решать это созданием нового массива интерфейсов и циклом переносить данные туда.. меня не радует
Заур
Тогда можно наверно сделать []*Something
Заур
Где наши опытные люди
Denis
нет, это действительно не поможет. надо действительно конвертировать массив
Заур
Голанг во всей красе
Artem
а там ... в определении функции нет случаем?
Artem
тогда скорее всего insert(something...)
heavycharged
https://golang.org/doc/faq#convert_slice_of_interface
Anonymous
тем не менее, кажется костылями
Nikita
тем не менее, кажется костылями
Написано же, что в памяти []type и []interface{} представлены по-разному, потому вместо тебя никто ничего конвертировать не будет
Anonymous
Нашёл выход
Anonymous
у меня мой массив структур, который я пытался запихнуть в insert монге, собственно заполнен результатами анмаршаллинга. Так вот почему бы не анмаршаллить в interface{} в таком случае, а не в структурку.
Aleksandr
как анмаршалить в interface? это что такое?
Anonymous
чёйто? )) работает жеж
Anonymous
вот например Вместо: type Response struct { MyList MyStruct`json:"something"` } сделать: type Response struct { MyList []interface{} json:"something" }
Aleksandr
interface это же не тип
Aleksandr
как в него анмаршаллить?
heavycharged
если под interface{} лежит имплементация Unmarshaler, то должно сработать.
Anonymous
как в него анмаршаллить?
response := Response{} err = json.Unmarshal(body, &response)
heavycharged
)))
Anonymous
всё работает
Anonymous
= ))
Anonymous
ну понятно мы теряем структуру данных внутри, не обратишься ни к чему, так что либо то либо то
heavycharged
interface это же не тип
https://play.golang.org/p/WY4Ai2INXkT
Anonymous
Конечно, тип
heavycharged
к слову, я тоже как-то споткнулся об эту хрень, помню что анмаршалил в интерфейс и все было ок, а потом через неделю пробую, и не выходит.
Anonymous
И что с ним случилось?