Илья
Можешь
Vasily
можно и заполнять
Илья
var MyScenario = Scenario{ Name: "Приветствие", Steps: []ScenarioStep{step1, step2} }
Alexey 〒.
можно и заполнять
можешь еще в функции init заполнить https://golang.org/doc/effective_go.html#init
Ivan
FROM golang:1.8 ADD ./requirements.txt /tmp/requirements.txt RUN ["/bin/bash", "-c", "go get -u $(</tmp/requirements.txt)"] 🤣🤣🤣🤣нашел в проекте
Мерль
но заполнть поля структуры я не могу?
Сделай функцию-конструктор
Sergey
типа штука, которая будет собирать мне готовую переменную
Sergey
на основе некоторых параметров?
Илья
да
Мерль
это как?
type Foo struct { Prefix string Tokens []string } func NewFoo(str string) *Foo { // здесь заполняй поля }
Sergey
тогда другой вопрос, вот я создал структуру HelloScenario и хочу заполнить Steps, а это должна быть структура у которой сови методы Init и UserResponseHandler для каждого шага сценария
Sergey
?
Daniel
в чем вопрос-то?
Daniel
как структуру нарисовать, в которой будут все нужные поля?
Daniel
или как методы это структуры в разных случаях будут по-разному вести себя?
Daniel
или что*
Sergey
сейчас пример кода приведу, минуту
Valentin
Слайс обьектов/интерфейсов
Valentin
Потом бежите по слайсу и вызываете методы
Daniel
не надо слайс
Daniel
вообще не надо
Valentin
А как ты будешь хранить неопределенное число шагов?
Valentin
Ну как вариант по типу миддлеваре можно сделать
Valentin
Chaining или как оно там называется
Anonymous
сейчас пример кода приведу, минуту
щас станет еще непонятнее ))
Aleksandr
ребят, в программировании есть проблема - сложная логика инициирования объектов. у этой проблемы есть решение - фабрики. Чего мудрить? опиши логику в фабрике, в нескольких, если речь идет о разных структурах и юзай
Sergey
type Scenario struct { Name string Steps []ScenarioStep } type ScenarioStep interface { Init() UserResponseHandler() } //Я хочу получить коллекцию сценариев, у каждого из них будет разное кол-во шагов, а у каждого шага Init() и UserResponseHandler() имеют собственную реализацию var HelloSctruct = Scenario{ Name: "Сценарий приветствие", // Steps: как напихать сюда структур или анонимных структур соответствующищ интерфейсу ScenarioStep? И можно ли это сделать? }
Sergey
в комментарии вопросики )
Valentin
Вопрос технический или как лучше и читаемо сделать?
Sergey
технический ну и советы по поводу того, как это правильнее сделать
nikita
хранить массив указателей на структуру, у этой струкруты имплементировать интерфейс шага сценария, затем просто в цикле выполнить их все
Aleksandr
func NewScenario(stepsData ...) Scenario { scenario := Scenario{ // ... steps: make([]Step, len(stepsData)), } for i, data := range stepsData { step := NewStep(data) scenario.steps[i] = step } }
Ivan
NewStep можно сделать с двумя аргументами-методами и получить конструктор анонимного шага. Steps:{ NewStep(func(){}, func(){}) }
Sergey
хм...спасибо товарищи, буду думать
Sergey
https://play.golang.org/p/9Bv84om98C
Sergey
вот, получилось как-то так
Aleksandr
выглядит все очень странно. t1 := struct{ ProtoScenarioStep }{} - это зачем?
Vasily
создание анонимной структуры которая встраивает в себе ProtoScenarioStep , которым сразу же удовлетворяет интерфейсу ScenarioStep
Vasily
наверное сделано чтобы разные шаги из разных структур делать
Vasily
вообще можно было бы конечно ProtoScenarioStep создавать сразу
Aleksandr
и мы возвращаемся к моему вопросу)
Sergey
да, прото - это лишнее
Sergey
можно избавиться от интерфейса
Sergey
https://play.golang.org/p/t5XQfa6WGN
Sergey
и всё будет работать
Sergey
)
Aleksandr
а init зачем нужен? в каком кейсе вызывается?
Aleksandr
типа эмуляция эвентов?)
Aleksandr
судя по тексту
Sergey
ну, типа да
Sergey
когда в сценарии начинается шагN
Sergey
вызывается его Init
Aleksandr
ну это скорее должно быть в том, что эти шаги обрабатывает
Aleksandr
а у Step долждно быть поле Id
Sergey
ну для каждого шага инит то свой
Aleksandr
то есть там логика будет?
Sergey
угу
Sergey
спасибо товарищи )
Мерль
[last news] Mini Rulebook for Go short declarations
Anonymous
Ребят работает кто с firebird из go?
Anonymous
Что за нах с этим firebird conversion error from string Поле типа VARCHAR не хочет принимать при Select WHERE n_otd.notd = CAST (? AS VARCHAR(50))
Anonymous
query := `select fio, nopr, Count(nopr) from patient INNER JOIN oprs ON patient.uid = oprs.uid LEFT JOIN n_otd ON oprs.otd = n_otd.otd LEFT JOIN n_opr ON oprs.opr = n_opr.opr LEFT JOIN N_MPS ON oprs.doc = n_mps.kmp LEFT JOIN POTD ON OPRS.UIK = POTD.UIK WHERE n_otd.notd = CAST (? AS VARCHAR(50)) AND (POTD.DTL between ? AND ?) GROUP BY fio, nopr` rows , _:= db.Select(query, date1, date2, notd)
Anonymous
Все вопрос снят
Anonymous
я неправильно последовательность параметров передавал
Anonymous
Вот дурак
Anonymous
Вот дурак
Firebird юзаешь как встроенную субд?
Anonymous
Firebird юзаешь как встроенную субд?
Не понял вашего вопроса
Anonymous
Пишу костыли для местного МИАЦ
Anonymous
Не понял вашего вопроса
Firebird embed или полноценный сервер?
Anonymous
Полноценный
ros
с Firebird только одна особенность нужно выставлять db.SetMaxIdleConns(-1) чтоб не держало соединения иначе файл базы будет расти со страшной силой
Nix
как go 1.9 на убунту обновить?
Anonymous
как go 1.9 на убунту обновить?
эээ apt update && apt upgrade нет?
Nix
не работает(