
Атас
27.02.2018
17:24:48

Arch
27.02.2018
17:25:55
ну это - да, но от этого я избавился, создав срез интерфейсов и собрав все данные в него и передав его с распаковкой в виде параметра функции, но это конечно странно
что функция которая может принять огромное кол-во параметров не может принять x, y...
думаю что кейс-то распространенный, почему разработчики не продумали его, не понятно

Google

Zver
27.02.2018
17:31:40

Атас
27.02.2018
17:31:42

Arch
27.02.2018
17:34:33
функция хочет переменное количество аргументов, которое может варьироваться в моем случае от 2 до ~бесконечности, просто все что после 2-ого параметра сворачивается в срез интерфейсов, и не понятно, почему я могу передать функции (x, y, z, a, b, c), но не могу (x, y, z...)
три точки говорит свернуть параметры в срез или развернуть их

Атас
27.02.2018
17:39:42
потому что сигнатура функции (v1, ...v2) а ты передаешь (v1, v2, ...v3) я попадал на такое
преобразуй y, []z в []c и передавай x, c...

Arch
27.02.2018
17:41:37
Так я это и сделал, я не могу понять почему разрабы не могли отсчитать строго объявленные переменные от начала и потом весь остаток упаковать в срез

Zver
27.02.2018
17:41:40
функция хочет переменное количество аргументов, которое может варьироваться в моем случае от 2 до ~бесконечности, просто все что после 2-ого параметра сворачивается в срез интерфейсов, и не понятно, почему я могу передать функции (x, y, z, a, b, c), но не могу (x, y, z...)
Потому что Гоу автоматически может привести любой тип к интерфесу, но массив интерфейсов это не интерфейс.

Arch
27.02.2018
17:42:27
массив, не важно чего можно так же в интерфейс привести, иначе бы не возможно было интерфейсы внутри интерфейсов
Это скорее риторический вопрос нежели практический

Атас
27.02.2018
17:43:44

Arch
27.02.2018
17:44:14
эпендом в форе
a := []interface{}{key}
for _, v := range timestamps {
a = append(a, v)
}

Атас
27.02.2018
17:48:03
здается мне что к []interface{} приводить не обязательно
a := []istring{key}
a = append(a, timestamps)
func(x,a...)
должно хватить

Google

Arch
27.02.2018
17:49:49
неа, он не может стринг развернуть в интерфейс
> cannot use timestamp (type []string) as type []interface {} in argument to

Daniel
27.02.2018
17:50:25
стринг в интерфейс - пожалуйста
и обратно тоже без проблем
но вот с массивами, слайсами и мапами это не работает
вернее - можно превратить слайс в интерфейс
нельзя превратить слайс в слайс интерфейсов
вы об этом тут уже час?

Arch
27.02.2018
17:52:55

Daniel
27.02.2018
17:53:36

Arch
27.02.2018
17:55:10

Daniel
27.02.2018
17:55:11
и ... - это не реальное превращение набора элементов в отдельные параметры, а синтаксический сахар по передаче слайса

Arch
27.02.2018
17:55:48

Daniel
27.02.2018
17:56:45

Zver
27.02.2018
17:57:33

Daniel
27.02.2018
17:58:11
на самом деле - надо смотреть, что там на стек ложится, слайс или элементы по одному

Arch
27.02.2018
17:58:29
А какой в этом смысл? Когда таким макаром можно спокойно передавать сам слайс и не париться за эти три точки

Daniel
27.02.2018
17:58:30
но с точки зрения синтаксиса можно считать, что слайс

Arch
27.02.2018
18:01:01

Google

Daniel
27.02.2018
18:01:30
и?

Zver
27.02.2018
18:01:32

Arch
27.02.2018
18:01:48

Daniel
27.02.2018
18:02:01
а почему должен быть разный?

Arch
27.02.2018
18:02:26

Zver
27.02.2018
18:02:53

Daniel
27.02.2018
18:03:45

Arch
27.02.2018
18:05:23
Ну он же в конечном итоге все равно по элементно разварачивается и ложится в стек, зачем оно перед этим слайс стрингов пытается привести к слайсу интерфейсов? и почему проваливается?

Zver
27.02.2018
18:05:24

Daniel
27.02.2018
18:06:06
я бы скорее предположил, что формируется слайс и на стек ложится как раз он

Daniel
27.02.2018
18:07:09
это бы объяснило все "странности"

Arch
27.02.2018
18:07:16
А должно быть наоборот, по сути))))

Daniel
27.02.2018
18:07:28
что кому должно?

Zver
27.02.2018
18:07:44

Arch
27.02.2018
18:07:48
Ну ладно, как факт задача давно решена, а это видимо особенность

Daniel
27.02.2018
18:08:02
а если у меня там миллион элементов - надо их все на стек пушить?

Arch
27.02.2018
18:08:20
Я предполагаю что по задумке должно

Daniel
27.02.2018
18:08:33
зачем же вы это предполагаете?

Google

Arch
27.02.2018
18:08:42

Daniel
27.02.2018
18:08:53
еще раз
очень похоже на то, что три точки - только синтаксический сахар для передачи слайса

Arch
27.02.2018
18:09:36
Да это я уже понял ))))

Daniel
27.02.2018
18:09:44
тогда давайте завязывать

Zver
27.02.2018
18:09:48

Daniel
27.02.2018
18:10:08
не

Admin
ERROR: S client not available

Daniel
27.02.2018
18:10:21
троеточие никакого смысла особенного не имеет
и запросто без него было бы можно обойтись
но - кто-то его нам сделал

Zver
27.02.2018
18:12:01
Как тогда компилятор в случае интерфейсов будет различать, вставить сам слайс как интерфейс или элементы этого слайса?

Arch
27.02.2018
18:12:10
Я к тому что в php и питоне есть нормальная распаковка элементов, а в го как оказалось только жалкое подобие, маскирующеееся под это)))

Daniel
27.02.2018
18:12:28
и в перле есть распаковка
вот только зачем она нужна, скажите мне, пожалуйста?
чтобы школоло могло передавать слайсы чего угодно как слайсы пустых интерфейсов?

Arch
27.02.2018
18:14:57
у меня есть библиотека, которая принимает на вход произвольное кол-во параметров, надо ей передать много всего, вот простая распаковка стринга в интерфейс бы спасла меня, а так приходится делать массив интерфейсов собирать его и потом псевдо распаковывать)))
Если бы разрабы оставили бы там слайс, то не было бы вопросов, но там ...

Zver
27.02.2018
18:16:12

Google

Daniel
27.02.2018
18:16:29
и вы сами контролируете расход памяти, да. и не надо бояться, что стек переполнится параметрами. и можно делать стек фиксированного размера

Zver
27.02.2018
18:18:09

Arch
27.02.2018
18:18:20

Daniel
27.02.2018
18:18:38
так и реализовано

Arch
27.02.2018
18:18:41
Тогда вопросов не будет и все будут довольны

Daniel
27.02.2018
18:18:53
их и нет, недовольный только один

Arch
27.02.2018
18:20:17
так и реализовано
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)

Daniel
27.02.2018
18:21:12
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)
фиксированные сами по себе, то, что описано слайсом - передается как слайс
три точки - оператор описания слайса, а не распаковки-запаковки, как вы почему-то думаете

Arch
27.02.2018
18:22:05
Ну вот, а я сказал что сначала отсчитываем фиксы, а все остальное упаковываем, вот была бы сказка, вы сказали что так и есть....

Daniel
27.02.2018
18:22:25
фиксы - это то, что в контракте функции указано.

Arch
27.02.2018
18:22:30
Ладно, закругляемся))))

Атас
27.02.2018
18:23:28
не фига, иначе бы я мог передать функции с (x string, y ... string) и так (x, y, z, a, b, c), и так (x, y, z...)
нет или (x, y, z, a, b, c) или (x, z...) но не как (x, y, z...)
все в сигнатуре описания функции
читаем https://golang.org/ref/spec#Passing_arguments_to_..._parameters

Arch
27.02.2018
18:24:10

Daniel
27.02.2018
18:24:20
еще как логично

Arch
27.02.2018
18:24:30

Zver
27.02.2018
18:24:32