Илья
Можешь
Vasily
можно и заполнять
Илья
var MyScenario = Scenario{
Name: "Приветствие",
Steps: []ScenarioStep{step1, step2}
}
Sergey
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)"]
🤣🤣🤣🤣нашел в проекте
Мерль
Alexey 〒.
Sergey
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
Sergey
Aleksandr
ребят, в программировании есть проблема - сложная логика инициирования объектов. у этой проблемы есть решение - фабрики. Чего мудрить? опиши логику в фабрике, в нескольких, если речь идет о разных структурах и юзай
Sergey
type Scenario struct {
Name string
Steps []ScenarioStep
}
type ScenarioStep interface {
Init()
UserResponseHandler()
}
//Я хочу получить коллекцию сценариев, у каждого из них будет разное кол-во шагов, а у каждого шага Init() и UserResponseHandler() имеют собственную реализацию
var HelloSctruct = Scenario{
Name: "Сценарий приветствие",
// Steps: как напихать сюда структур или анонимных структур соответствующищ интерфейсу ScenarioStep? И можно ли это сделать?
}
Anonymous
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?
ros
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
Anonymous
Пишу костыли для местного МИАЦ
Anonymous
Полноценный
ros
с Firebird только одна особенность нужно выставлять
db.SetMaxIdleConns(-1)
чтоб не держало соединения
иначе файл базы будет расти со страшной силой
Nix
как go 1.9 на убунту обновить?
Nix
не работает(