
Maxim
05.10.2017
06:58:33

Michael
05.10.2017
06:58:56

Pawel
05.10.2017
07:00:53

Ivan
05.10.2017
07:01:24
А как же CommonDao<T> и CommonService<T>

Google

Ivan
05.10.2017
07:01:47
Без них вообще нельзя программировать

Pawel
05.10.2017
07:02:51

Michael
05.10.2017
07:03:38

?
05.10.2017
07:39:08
Привет, котаны!

Andrew
05.10.2017
07:40:39

?
05.10.2017
07:47:17
Собственно, вопрос. Когда я дергаю профайлер, то он у меня показывает только часть из всего выполнения.
Запускаю так:
func main() {
defer profile.Start().Stop()
На выходе получаю (см. картинку сообщением ниже)
ЧЯДНТ?

Michael
05.10.2017
07:50:03
start
defer stop
не?

?
05.10.2017
07:51:32
Ты неправильно понимаешь то, как работает defer. Сейчас набросаю в playground.
Michael https://play.golang.org/p/6b8DxSeu7g

in favor
05.10.2017
07:57:36
интересно, он делает дефер вызовы только последней функции ?

Google

Michael
05.10.2017
07:58:44
The deferred call's arguments are evaluated immediately, but the function call is not executed until the surrounding function returns.

?
05.10.2017
07:58:45

Michael
05.10.2017
07:58:58
ну типа на том завязано
по сути оно вычисляет ресивер

?
05.10.2017
08:00:47
Но суть не в том, вызываю профайлер верно, но на выходе получаю кривой результат. Кто какие пакеты для профайлинга использует? Выше github.com/pkg/profile

Alexey
05.10.2017
08:05:43
Профайлер CPU всегда показывает часть, он сэмплирующий
Можно сэмплы чаще делать, для этого есть опция
А у go tool pprof есть опция для уменьшения или выключения фильтрации редких сэмплов

?
05.10.2017
08:44:36
Собстенно, в итоге оказалось, что это все задержки сети. А я было думал, что как-то профайлер все это время неправильно использовал.

in favor
05.10.2017
08:53:09

?
05.10.2017
08:56:06
$ time links -dump https://linux.org.ru >/dev/null
links -dump https://linux.org.ru > /dev/null 0,03s user 0,01s system 1% cpu 2,897 total
$ time wi get https://linux.org.ru >/dev/null
wi get https://linux.org.ru > /dev/null 0,20s user 0,03s system 6% cpu 3,465 total
То есть не все так плохо, как я думал, и оно в принципе на уровне других.

Анатолий
05.10.2017
09:25:14
Парни, есть у кого гитлаб в контейнере с самоподписаным сертификатом? Нужна помощь с реджистри и dind.

Ivan
05.10.2017
09:28:43

Анатолий
05.10.2017
09:30:32
А в CI с dind вот такая ошибка.
Уже третий день голову ломаю, чего-то я точно не знаю.

Anton
05.10.2017
09:35:36
А нафига тебе реджистри локально?
Ставь на нормальный сервер и запихивай сертификат от LetsEncrypt
У меня такая же фигня с самоподписным была, тебе надо в конфигах докера прописать небезопасные хосты

Google

Anton
05.10.2017
09:37:21
Должно помочь
https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry

Анатолий
05.10.2017
09:39:31
Спасибо, копну сейчас туда
Прописал - такая же ерунда(

Sergey
05.10.2017
11:54:37
Всем привет. Есть парочка вопросов, помогите пожалуйста
type Scenario struct {
Name string
Steps []ScenarioStep
}
type ScenarioStep interface {
Init()
UserResponseHandler()
}
Могу ли я как-нибудь создать переменную типа структуры вне функций?
var MyScenario Scenario{
Name: "Приветствие",
Steps: {
}
}
Могу ли я при при объявлении структуры предустановить какие-нибудь поля вложенной структуры?
type MyScenario struct{
Scenario {
Name: "Приветствие"
}
}
оба варианта вызывают ошибку
а мне хочется создать коллекцию объектов, с набором полей структуы Scenario

Vasily Romanov
05.10.2017
11:57:47
var MyScenario = Scenario{...}

Ilya
05.10.2017
11:57:51
Значения по умолчанию устанавливать нельзя

Vasily Romanov
05.10.2017
11:58:11
var MyScenario Scenario{ - тут намешано объявление переменой и инициализация структуры

Sergey
05.10.2017
11:58:59
и это тоже ошибка

Ilya
05.10.2017
12:00:01
вне функций переменные нужно вместе с var объявлять

Sergey
05.10.2017
12:00:03
я вот думаю как правильнее организовать копозицию структур, чтобы я мог получить HelloScenario, FuckYouScenarion и ещё всякие сценарии на основе структуры Scenario

Vasily Romanov
05.10.2017
12:00:18
через var глобальные переменные определяются

Sergey
05.10.2017
12:00:24

Ilya
05.10.2017
12:00:35
Можешь

Vasily Romanov
05.10.2017
12:00:36
можно и заполнять

Ilya
05.10.2017
12:01:24
var MyScenario = Scenario{
Name: "Приветствие",
Steps: []ScenarioStep{step1, step2}
}

Google

Sergey
05.10.2017
12:02:05

AxiS
05.10.2017
12:02:25
можно и заполнять
можешь еще в функции init заполнить
https://golang.org/doc/effective_go.html#init

Ivan
05.10.2017
12:02:25
FROM golang:1.8
ADD ./requirements.txt /tmp/requirements.txt
RUN ["/bin/bash", "-c", "go get -u $(</tmp/requirements.txt)"]
????нашел в проекте

Мерлин
05.10.2017
12:03:12

AxiS
05.10.2017
12:03:30

Sergey
05.10.2017
12:03:40
типа штука, которая будет собирать мне готовую переменную
на основе некоторых параметров?

Ilya
05.10.2017
12:05:07
да

Мерлин
05.10.2017
12:06:57
это как?
type Foo struct {
Prefix string
Tokens []string
}
func NewFoo(str string) *Foo {
// здесь заполняй поля
}

Sergey
05.10.2017
12:08:06
тогда другой вопрос, вот я создал структуру HelloScenario и хочу заполнить Steps, а это должна быть структура у которой сови методы Init и UserResponseHandler для каждого шага сценария
?

Daniel
05.10.2017
12:10:08
в чем вопрос-то?
как структуру нарисовать, в которой будут все нужные поля?
или как методы это структуры в разных случаях будут по-разному вести себя?
или что*

Sergey
05.10.2017
12:12:24
сейчас пример кода приведу, минуту

Valentin
05.10.2017
12:13:19
Слайс обьектов/интерфейсов
Потом бежите по слайсу и вызываете методы

Daniel
05.10.2017
12:13:33
не надо слайс

Google

Daniel
05.10.2017
12:13:41
вообще не надо

Valentin
05.10.2017
12:14:29
А как ты будешь хранить неопределенное число шагов?
Ну как вариант по типу миддлеваре можно сделать
Chaining или как оно там называется

Mush
05.10.2017
12:16:46

Sergey
05.10.2017
12:17:02

Aleksandr
05.10.2017
12:17:05
ребят, в программировании есть проблема - сложная логика инициирования объектов. у этой проблемы есть решение - фабрики. Чего мудрить? опиши логику в фабрике, в нескольких, если речь идет о разных структурах и юзай

Sergey
05.10.2017
12:18:23
type Scenario struct {
Name string
Steps []ScenarioStep
}
type ScenarioStep interface {
Init()
UserResponseHandler()
}
//Я хочу получить коллекцию сценариев, у каждого из них будет разное кол-во шагов, а у каждого шага Init() и UserResponseHandler() имеют собственную реализацию
var HelloSctruct = Scenario{
Name: "Сценарий приветствие",
// Steps: как напихать сюда структур или анонимных структур соответствующищ интерфейсу ScenarioStep? И можно ли это сделать?
}

Mush
05.10.2017
12:18:52

Sergey
05.10.2017
12:19:23
в комментарии вопросики )

Valentin
05.10.2017
12:20:20
Вопрос технический или как лучше и читаемо сделать?

Sergey
05.10.2017
12:21:58
технический ну и советы по поводу того, как это правильнее сделать

Никита
05.10.2017
12:23:48
хранить массив указателей на структуру, у этой струкруты имплементировать интерфейс шага сценария, затем просто в цикле выполнить их все

Aleksandr
05.10.2017
12:25:08
func NewScenario(stepsData ...) Scenario {
scenario := Scenario{
// ...
steps: make([]Step, len(stepsData)),
}
for i, data := range stepsData {
step := NewStep(data)
scenario.steps[i] = step
}
}

Ivan
05.10.2017
12:30:15
NewStep можно сделать с двумя аргументами-методами и получить конструктор анонимного шага.
Steps:{
NewStep(func(){}, func(){})
}

Sergey
05.10.2017
12:48:56
хм...спасибо товарищи, буду думать
https://play.golang.org/p/9Bv84om98C
вот, получилось как-то так

Aleksandr
05.10.2017
14:14:00
выглядит все очень странно.
t1 := struct{ ProtoScenarioStep }{} - это зачем?

Vasily Romanov
05.10.2017
14:16:02
создание анонимной структуры которая встраивает в себе ProtoScenarioStep , которым сразу же удовлетворяет интерфейсу ScenarioStep