Anonymous
попробуй пинги проверить
.
Зайди с другой сети и просмотри
Александр
у меня главная страница открывается
Александр
сек впн попробую
.
Есть ещё и сайтик для проверки состояния сайта
Александр
через впн работает
Кириллл
https://github.com/status
https://status.github.com/messages
Roman
Есть что-нибудь попроще чем RabitMQ? Нам нужна очень небольшая очередь до 500 заданий.
Alexei
Vladislav
Constantine️
в субд своей (мускуль или посгря) заведите табличку и все
Constantine️
для 500 заданий
Constantine️
а так, да, редис
Roman
Ок, благодарю. DB там не нужна, а Redis уже есть.
Roman
всмысле нет Callback?
heavycharged
Ребятки, подскажите, есть некая структура, которая должна быть заблокирована от изменений в том месте, где она создана.
Т.е., создаю структуру, блокирую её, передаю разным функциям, функции работают с ней как с иммутабельной.
Вопрос такой: как это реализовать?
Структуры в разных пакетах, и на месте создания я не могу получить доступ к закрытым методам.
heavycharged
Если чуть детальнее, есть репозиторий, есть коллекция. Допустим, мне нужно коллекция на чтение, но репозиторий должен как-то записать в эту коллекцию, он создает коллекцию, пишет в неё, и блочит, все последующие вызовы Push(), Pop() у коллекции возвращают ошибку, что объект иммутабельный.
heavycharged
Была идея на месте создавать ссылку на структуру, и как-то по адресу этой ссылки блокировать, т.е. есть методы Lock() и Unlock(), я передаю в Lock(locker), и затем коллекцию передаю дальше кому нужно, так как она заблокирована, и чтобы её разблочить, нужен адрес этой ссылки, но он есть только у создателя самой коллекции.
Заур
Лучше напиши небольшой пример на play.golang.org
Заур
Немного непонятно просто
🏁Александр
Если чуть детальнее, есть репозиторий, есть коллекция. Допустим, мне нужно коллекция на чтение, но репозиторий должен как-то записать в эту коллекцию, он создает коллекцию, пишет в неё, и блочит, все последующие вызовы Push(), Pop() у коллекции возвращают ошибку, что объект иммутабельный.
все свойства приватные, приватная структура, пишешь первый раз через фабрику
🏁Александр
значение возвращаешь через функцию
heavycharged
У меня интерфейсы, не структуры, я везде возвращаю интерфейс (Repository - интерфейс, Collection - интерфейс). У интерфейсов все методы только публичные, и оба интерфейса в разных пакетах.
🏁Александр
я про свойства
Sergey
Как лучше сделать тестирование функций создающих таблицы в БД?
Отдельный конфиг с данными для подключения к тестовой базе?
В тестах немного опыта, интерсено мнение опытных гоферов.
heavycharged
Немного непонятно просто
пример сложно описать, там много кода на самом деле. просто представь себе три пакета: модели, коллекции, и репозиторий. модели - это структуры, коллекция - интерфейс для работы с множеством моделей, репозиторий - сохраняет/извлекает модели и создает из них множества(коллекции).
🏁Александр
heavycharged
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
Alexander
Заур
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
Если у тебя всё и так через интерфейс, почему нельзя просто использовать какой-нибуль флаг в структуре?
Заур
Потом реализовать сами функции с проверкой флага и с возвращением ошибок
Заур
Моя не понимать
Заур
Моя пас
V
Антон
Зачем имитировать иммутабельность в языке, если можно просто взять язык, который её поддерживает с самого начала?
Илья
Илья
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так:
c := NewProductCollection()
// например, делаю выборку из базы
for rows.Next() {
c.Push(model.Product)
}
c.Lock() // блокирую коллекцию от изменений
return c // возвращаю коллекцию, и её могут только читать
в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.
в вашей архитектуре - можно сделать сбор слайса продуктов, и инициализацию иммутабельной коллекции из слайса
Илья
и тогда получится то, что вы хотите
Илья
но все это пахнет джавой и плохим дизайном, на мой вкус
Заур
Заур
Изи
heavycharged
да, действительно изи) ладно, может и без иммутабельности запилю, спасибо
Denis
Или sync.Map
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...
V
вопрос что у вас будет при изменении размера мапы с ключиком, я не готов ответить. преждевременная оптимизация - зло
L
Sergei
L
она умная.
не настолько умная, что бы при записи не блокировать всю мапу
Sergei
L
Denis
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой
Denis
В другие ячейки
Denis
V
потому что во время чтения и записи возможен вызов косвенных операций, которые приводят к ошибкам при несинхронизированном вызове
Vladimir
Vladimir
Сам же ссылку дал
L
для некоторых случаев
L
но энивей там блокируетя на запись вся мапа
L
Илья
Anna
#работа #remote
Всем привет!
Ищу экспертов с большим практическим опытом в GO, готовых передавать свои знания другим! Занятость преподавателя складывается из проведения вебинаров и проверки домашних заданий студентов. И то, и другое оплачивается.
Продолжительность одного курса -около 5 месяцев. Преподавать можно в любой точке мира, без отрыва от основной работы. Есть вариант записи видеокурса. От вас не требуется опыт преподавания, мы с удовольствием и бесплатно научим вас учить!
С радостью отвечу на все вопросы. Лучше в личку
Kirill
Alexander
Ребят, хочу написать свою небольшую KV БД, что от нее требуется
1) возможность insert/delete, update не нужен
2) очень быстрая запись
3) индекс по ключу
4) возможность "постраничной" подгрузки в память, чтобы не держать все в RAM
Alexander
существующие решения какой-то оверхед
Alexander
что можно почитать? с чего начать?
Kirill
Kirill
Kirill
ошизенный ответ %))
Kirill
на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?
Alexander
соре
Kirill