@proGO

Страница 1257 из 1674
Vlad
27.02.2018
12:04:27
Позвольте описать задачу чуть более ясно. Есть некая ETL-штука. Которая: 1. Берет csv-файлик, условно назовем его "updates_for_A" 2. На основании данных в CSV заполняет таблицу "aggregated_A" 3. Используя mapping: aggregated_A.col1 -> B.col1 обновляет записи в B.

Daniel
27.02.2018
12:04:33
не понятно, где проблема

Vlad
27.02.2018
12:04:37
надеюсь, все прояснилось.

Google
Vlad
27.02.2018
12:04:47
Проблема в том, что это "первый экспириенс".

И не ясно, как лучше все это организовать.

Daniel
27.02.2018
12:05:04
это не про го, я подозреваю, а про sql и квиьы

Michael
27.02.2018
12:05:14
это ETL

Vlad
27.02.2018
12:05:18
И как ± должен выглядеть этот файл с mapping

Michael
27.02.2018
12:05:36
И как ± должен выглядеть этот файл с mapping
это у тебя в спеке должно быть

Vlad
27.02.2018
12:05:58
Это есть. С технической точки зрения - мне просто сделать JSON?

Michael
27.02.2018
12:06:35
можно и в toml, не суть

Alexander
27.02.2018
12:08:02
Как часто надо будет править этот mapping

?

Vlad
27.02.2018
12:08:18
Структура, выходит, следующая: { "A.col1" : "B.col2", "A.col2" : "B.col123", }

Michael
27.02.2018
12:08:20
вопрос в том, какие агрегации и преобразования должны быть в ваших mapping'ах

Google
Vlad
27.02.2018
12:08:35
Как часто надо будет править этот mapping
К сожалению, тут приходится лишь гадать. В теории - вообще не надо

Alexander
27.02.2018
12:09:20
Vlad
27.02.2018
12:10:12
Если не надо, можно и без конфига
Увы, руководство указало, что хочет видеть конфиг. Значит, правки все могут быть, хз.

Michael
27.02.2018
12:10:27
Если не надо, можно и без конфига
там от задач и от хотелок "прикладного" пользователя будет зависить, раз и на всегда сделать такой файл конфигурации не получится

Vlad
27.02.2018
12:10:49
"a.Col=b.Col1;a.Col2=b.Col3;...."
не совсем понял, это разве валидный JSON?..

Michael
27.02.2018
12:11:04
Vlad
27.02.2018
12:11:18
Тогда подскажите, что сие есть за вещь?

Michael
27.02.2018
12:11:38
там strings.Split("..", ";")

Vlad
27.02.2018
12:12:10
Ага, у меня будет просто текстовый файлик с мэппингом. Благодарю, подумаю над этим

Michael
27.02.2018
12:12:12
если вам нужно только соответствие А к Б полей

Vlad
27.02.2018
12:12:21
Да, все верно, только оно и нужно.

Alexander
27.02.2018
12:54:51
Они говорили это безопасно... они говорили вкладывайся в крипту....

А уже удалили))

А много ли тут кто пилит блокчейн проекты на go?

Alexey
27.02.2018
12:56:16
А много ли тут кто пилит блокчейн проекты на go?
в соседнем чатике пилят: https://t.me/distributed

Google
Атас
27.02.2018
13:23:39
ни у кого нет норм примера, как писать в unix socket и слушать с него респонс? Я уже всю голову сломал((( sock := `/tmp/geth.ipc` conn, _ := net.Dial("unix", sock) method := `{...}\n` num, err := conn.Write([]byte(method)) Write же возвращает количество записанных byte
может поможет очень старый и простой код прокси из unixsocket в tcp, почти что первое что было написано на Go даже не все ошибки обрабатываю, как сейчас смотрю, но работает уже 3 года даже не напоминает о себе func main() { num := runtime.NumCPU() runtime.GOMAXPROCS(num) log.Print("proxyls start") // Listen on TCP port 2000 on all interfaces. l, err := net.Listen("tcp", ":17835") if err != nil { log.Fatal(err) } defer l.Close() for { // Wait for a connection. conn, err := l.Accept() if err != nil { log.Fatal(err) } // Handle the connection in a new goroutine. // The loop then returns to accepting, so that // multiple connections may be served concurrently. go func(tcp net.Conn) { defer tcp.Close() UA, err := net.ResolveUnixAddr("unix", "/var/spool/icinga/rw/live") if err != nil { log.Print(err) return } unix, err := net.DialUnix("unix", nil, UA) if err != nil { log.Print(err) return } defer unix.Close() io.Copy(unix, tcp) if err = unix.CloseWrite(); err != nil { log.Print(err) return } io.Copy(tcp, unix) // Shut down the connection. }(conn) } } насколько я помню с юникс сокетами так: 1 конект к сокету 2 запись в него запроса/команды 3 закрытие сокета на запись 4 чтение до EOF из сокета 5 закрытие сокета полное наскоолько припоминаю 3 пунк был важен, без него не мог прочитать ответ, по закрытию ввода определялось что он полностью завершен и можно отвечать, но возможно это фича конктетного софта необщая для всех уже не помню

Vadim
27.02.2018
13:24:37
может поможет очень старый и простой код прокси из unixsocket в tcp, почти что первое что было написано на Go даже не все ошибки обрабатываю, как сейчас смотрю, но работает уже 3 года даже не напоминает о себе func main() { num := runtime.NumCPU() runtime.GOMAXPROCS(num) log.Print("proxyls start") // Listen on TCP port 2000 on all interfaces. l, err := net.Listen("tcp", ":17835") if err != nil { log.Fatal(err) } defer l.Close() for { // Wait for a connection. conn, err := l.Accept() if err != nil { log.Fatal(err) } // Handle the connection in a new goroutine. // The loop then returns to accepting, so that // multiple connections may be served concurrently. go func(tcp net.Conn) { defer tcp.Close() UA, err := net.ResolveUnixAddr("unix", "/var/spool/icinga/rw/live") if err != nil { log.Print(err) return } unix, err := net.DialUnix("unix", nil, UA) if err != nil { log.Print(err) return } defer unix.Close() io.Copy(unix, tcp) if err = unix.CloseWrite(); err != nil { log.Print(err) return } io.Copy(tcp, unix) // Shut down the connection. }(conn) } } насколько я помню с юникс сокетами так: 1 конект к сокету 2 запись в него запроса/команды 3 закрытие сокета на запись 4 чтение до EOF из сокета 5 закрытие сокета полное наскоолько припоминаю 3 пунк был важен, без него не мог прочитать ответ, по закрытию ввода определялось что он полностью завершен и можно отвечать, но возможно это фича конктетного софта необщая для всех уже не помню
спасибо!

Vlad
27.02.2018
13:25:00
На правах DBA задам вопрос - что курил автор этого кейса?
Я - скромный джун, моего мнения не спрашивают. Дали задачу и описание - решаю.

Пока что не в моей компетенции указывать.

Атас
27.02.2018
13:25:54
спасибо!
спасибо это когда заработает :) а пока еще не за что :)

Vlad
27.02.2018
14:28:01
Пилим обычный веб. Но Хрюши упорно зовут в блокчейн-проекты.

Alex
27.02.2018
14:46:44
Товарищи, привет!) Подскажите, есть возможность сделать тег для json такой, чтобы работал только для unmarshal, а для marshal не работал? :)

Alex
27.02.2018
14:48:29
Нельзя
Грустно, но спасибо)

Vasily Romanov
27.02.2018
14:49:41
Грустно, но спасибо)
Пишите кастомный маршалер-анмаршалер, который будет смотреть в другие теги

Alexey
27.02.2018
14:50:06
Пишите кастомный маршалер-анмаршалер, который будет смотреть в другие теги
Проще две структуры создать, и конвертер между ними

John
27.02.2018
14:50:22
Проще две структуры создать, и конвертер между ними
Или два поля в одной структуре, да ... %)

/me подает костыли

Igor
27.02.2018
14:52:48
/iqtest

Sergey
27.02.2018
14:53:56
/iqtest
not passed

Alex
27.02.2018
15:05:41
Пишите кастомный маршалер-анмаршалер, который будет смотреть в другие теги
Да, так и сделаем. Пока это не критично, думал, есть простой способ :)

Admin
ERROR: S client not available

Google
Roman
27.02.2018
15:37:49
как правильно назвать протокол, основанный на ASCII тексте, но строго форматированный? например: [type(1)][id(32)][payload(...)] т.е. какой термин обозначает данное понятие?

Alexey
27.02.2018
15:44:11
JustYetAnotherTextProtocol

Roman
27.02.2018
15:44:37
я думал может этому понятию какой термин существует)

Alexey
27.02.2018
15:45:19
4-й уровень в 4-х уровневой модели как называется, так и его можно назвать

Roman
27.02.2018
15:45:34
кстати нельзя данное назвать binary protocol? ведь формат строго разбит на позиции байтов, даже если это ASCII

Alexey
27.02.2018
15:46:23
Application Layer Protocol ?

Вон как на SO пишут: Binary protocol versus text protocol isn't really about how binary blobs are encoded. The difference is really whether the protocol is oriented around data structures or around text strings.

[type(1)][id(32)][payload(...)] - это как раз data structure

Roman
27.02.2018
15:49:16
ну вот тогда теперь всё ясно, Binary Protocol

Arch
27.02.2018
16:14:19
Народ, а в го же нет распаковки? У меня есть срез стрингов, надо их запихнуть в функцию которая которая принимает в виде аргумента (x ... interface{})

Aleksandr
27.02.2018
16:14:56
x...

Arch
27.02.2018
16:15:30
те передать мой срез как переменную и троеточие после нее?

Aleksandr
27.02.2018
16:16:08
да

Arch
27.02.2018
16:16:38
да
Благодарю

Ах, ты взболтать, но не смешивать(((((

обидная оплошность have (string, string, []string...) want (string, ...interface {})

Народ а можно стринг в интерфейс распаковать? каким - то спобом кроме итерирования среза фором и эпендом по одному элементу? https://play.golang.org/p/QOvTu98iPc-

Google
Arch
27.02.2018
16:57:19
ну здесь както так ... https://play.golang.org/p/UBao-ZM1ND1
Вопрос в другом, как внутренности перести в интерфейс, а не срез туда запихнуть)))

Атас
27.02.2018
16:59:43
я видел что пример поправил... посмотрим

Zver
27.02.2018
17:18:51
`a := interface{}([]string{"a", "b", "c"}) fmt.Printf("%+v\n", a)`
Это только для предопреленных и не большого размера. Проще тогда сразу массив интерфейсов создать.

Жаль(
Там цикл в две строчки, чего страдать. Если много раз надо, то сделайте фукцию. И лучше сразу выделать память под все элементы.

Страница 1257 из 1674