Daniel
Они редко нужны
Chebyrash
Ну вот если я точно знаю, что буду билдить только под linux, то могу вставить чтобы каждый раз не писать GOOS=linux?
Daniel
Это другое
Daniel
Проще экспорт сделать переменной
Nikita
В сокеты прилетает что-то типа json-rpc - например, запрашивают список сообщений. Сервер должен распарсить запрос, понять, что хочет браузер, и отдать этот список сообщений опять же в определенном формате типа json-rpc Сами сообщения сервер не хранит, и к базе доступа нет, поэтому нужно это сделать другому (клиентскому) коду, но этот код не должен влиять на сам протокол работы сервера. У нас несколько проектов, и эти чаты нужны оказались на еще одном проекте. Не хочется с нуля писать сервер и разрабатывать свой протокол обмена с браузером, поэтому то, что реализует протокол, решили выделить в отдельный пакет, а всё взаимодействие с конкретным проектом - это должно быть реализовано уже в конкретном проекте
Получается, что сервер, который обрабатывает с броузера запросы, еще отправляет запрос к третьему серверу и ждет от него ответа?
Александр
пока не ждёт, но идея такая
Nikita
Ну вот если я точно знаю, что буду билдить только под linux, то могу вставить чтобы каждый раз не писать GOOS=linux?
Смотря при каких условиях билдить. Если люди будут билдить с разных ос, а потом запускать на линуксе, надо явно указывать таргет ос
Vladislav
Ну вот если я точно знаю, что буду билдить только под linux, то могу вставить чтобы каждый раз не писать GOOS=linux?
build теги используют, когда нужно описать, что конкретный файл можно билдить только под линукс.(а под винду другие файлы, например) То под что билдить во время билда указывает переменная окружения. На нее можно сделать export GOOS=linux.
Nikita
да. В одном проекте это БД, в другом http может быть
Т.е. грубо говоря, у вас приложение разбито на некоторые независимые друг от друга (микро) сервисы и стоит проблема, как общаться между ними.
Nikita
Так почему бы не заюзать брокер сообщений? Ну реально выходит, что приходится костылять свой
Александр
Т.е. грубо говоря, у вас приложение разбито на некоторые независимые друг от друга (микро) сервисы и стоит проблема, как общаться между ними.
не, у нас 2 разных проекта и они не связаны между собой. Нужно чаты и там, и там. Хотелось бы переиспользовать серверную часть, но т.к. проекты разные, то реагировать нужно по-разному на них на разных проектах
Александр
точнее, у на 4 проекта и 4 команды, но чаты пока на 2-х нужны, на 1-м реализованы, но там жёсткая связанность с конкретным проектом
Nikita
точнее, у на 4 проекта и 4 команды, но чаты пока на 2-х нужны, на 1-м реализованы, но там жёсткая связанность с конкретным проектом
А как вариант написать сервис, который будет слушать чат, дальше все складывать в RabbitMQ?
Vladislav
не, у нас 2 разных проекта и они не связаны между собой. Нужно чаты и там, и там. Хотелось бы переиспользовать серверную часть, но т.к. проекты разные, то реагировать нужно по-разному на них на разных проектах
Я правильно понял, что ты пытаешься серверную либу под протокол сделать? И в зависимости от сервера надо поразному обрабатывать те же события?
Vladislav
Ну сделай в либе функцию установить хэндлер под такое событие и все.
Александр
Вот я и делаю, говорят хрень какая-то) Маппинги на них пока что
Nikita
Ну мы же не видим всю картинку целиком
Александр
Ну вот я и спрашиваю) Тут client.GetChatMessages(event) - это кастомный обработчик func (c *MessagesServerHandler) GetMessages(event models.IncomeEvent) { response, err := client.GetChatMessages(event) if err != nil { resultChan <- event.CreateResult(nil, err.Error()) return } resultChan <- event.CreateResult(response, nil) }
Vladislav
Вот я и делаю, говорят хрень какая-то) Маппинги на них пока что
Ну стандартная либа так делает во всяких http, а нам нельзя что ли?
Александр
А с клиента скорее всего будет server.handler(action, handler)
Александр
Ну вообще, да, так http и делает type ServeMux struct { mu sync.RWMutex m map[string]muxEntry hosts bool // whether any patterns contain hostnames } //... mux.m[pattern] = muxEntry{explicit: true, h: handler, pattern: pattern}
Sergey
много читателей не приводит к панике, к панике приводит много писателей
Sergey
хотя, нет, я не прав, два читателя при одновременном доступе тоже приведут к панике если есть запись
Anatoliy
Народ, а как можно сделать анонимно что-то вроде: res := Result{ Status: status, Result: H{ "token": tokenString, }, Error: error, } type Result struct { Status bool `json:"status"` Error string `json:"error,omitempty"` Result map[string]interface{} `json:"result,omitempty"` } type H map[string]interface{} Что бы не потребовалось type H делать?
Daniel
этот код не должен компиляться
Mike
Result: map[string]inteface{} { "token": tokenString } ?
Anatoliy
Но он компиляется
Anatoliy
Result: map[string]inteface{} { "token": tokenString } ?
а вот так ошибку как раз выдает
Anatoliy
Это я уже пробовал, в итоге пришлось остановиться на моем варианте, но он мне не нравится
Daniel
Но он компиляется
нет, не компиляется
Daniel
ни так, ни эдак
Daniel
сделайте, чтоли, плейграунд
Anatoliy
нет, не компиляется
http://prntscr.com/hi531n
Nikita
сделайте, чтоли, плейграунд
выше дали правильнй ответ
Anatoliy
http://prntscr.com/hi53az
Anatoliy
Не понимаю как оно "не может" если оно делается
Anatoliy
выше дали правильнй ответ
Result: map[string]inteface{} { "token": tokenString } этот?
Daniel
то, что вы привели - огрызок кода, он не компиляется
Anatoliy
Вот вам метод, он работает
Daniel
в плейграунд, пожалуйста
Anatoliy
ссылку на него можно? не очень понятно что за плейграунд
Daniel
ма-ма
Nikita
он типа хочет чтобы ему рабочий код написали и на go playground запостили
Anatoliy
https://play.golang.org/
Anatoliy
оно?
Anatoliy
щас
Nikita
только откуда там какой-то макарон возьметься?
Anatoliy
на макарон там вообще пофигу
Daniel
только откуда там какой-то макарон возьметься?
макарон к сути вопроса не имеет отношения
Anatoliy
в плейграунд, пожалуйста
всё, спасибо. я понял. вот так надо: Result: map[string]interface{} { "token": tokenString, },
Daniel
о!
Daniel
примерно 90% вопросов решаются при попытке изготовить минимально рабочий код
Anatoliy
но меня интересует я могу убрать как раз вот это: "map[string]interface{}" ?
Daniel
а как его уберешь?
Daniel
строгая статическая типизация
Anatoliy
примерно 90% вопросов решаются при попытке изготовить минимально рабочий код
я пробовал изготовить рабочий код, ток оно не работало/ я interface писал без {}. считал что надо писать значения внутри {}
🏁Александр
ооо я вижу с вопросами в субботу не уйметесь
🏁Александр
Anatoliy
нет конечно) пошел проходить :)
Yaroslav
Всем привет, подскажите у goland есть бесплатная версия ?
Kirill
Всем привет, подскажите у goland есть бесплатная версия ?
Да, есть https://www.jetbrains.com/go/buy/#edition=discounts
Yaroslav
спасибо
Slach
Бодрого времени суток всем а вот у меня есть такая структура map[time.Time]int заполняется вот так dateIndex := make(map[time.Time]int) i := 0 for d := cfg.Config.DateSince; d.Before(cfg.Config.DateUntil); d = d.AddDate(0, 0, 1) { dateIndex[d] = i i++ }получаю индексы строковом представлении вот такие 2017-11-09 00:00:00 +0000 UTC потом выбираю из другого источника тоже time.Time но там значение выглядит уже в строковом представлении как 2017-11-03T00:00:00Z как бы мне второе значение привести к UTC ?
Slach
сам задал вопрос сам ответил https://golang.org/pkg/time/#Time.UTC
Slach
еще раз всем привет а как правильно делать патчи для библиотек golang на github? вот сделал я форк а во всех тестах import настроен на адрес старого репозиторя мне надо как то по хитрому git clone делать? и GOPATH перенастраивать?
Vladislav
Нужно клонить по пути стандартного репозитория.
Slach
ясно, ок. спасибо
Slach
блин а если хочу пользоваться "форком" пока пулл-реквест не смержили, то клонирование форка... в свой проект внутри себя все равно будет на старые пути ссылаться блин неудобно то как ...
Vasili
/
Slach
? это вы ко мне обращаетесь?
Slach
спасибо дорогой человек
Oleg
а кто-нибудь пользует flatbuffers?
Oleg
а кто-то сталкивался с проблемой, когда при записывании массива через writer.WriteByte (или стринг, всё равно) он просто недописывал часть данных ? хотя через ioutil.WriteFile всё ок ?