Есть ли способ использовать комбинацию аргументов с разделителями и простых аргументов (определенных ниже) в функции, принимающей переменный параметр в golang? Если нет, то есть ли известная идиома, которая приближает эту функцию? Если возможно, существует ли идиома, приближающая эту функцию, которая не требует повторения имени типа?
Предположим, у меня есть функция с переменным параметром в golang типа ...T
.
Похоже, что ваши возможности на сайте вызова ограничены:
- несколько простых аргументов , каждый из которых типа
T
, т.е. f(…… x1, x2, x3 ……)
- один аргумент типа
[]T
, т. Е. f(…… ...xs ……)
В некоторых других языках, таких как Python, можно захватывать комбинацию простых аргументов и аргументов с аргументами с аргументом variadic:
$ python
>>> def foo(*args): return args
...
>>> foo(1, 2, *[3, 4])
(1, 2, 3, 4)
Однако, похоже, что то же самое не работает на ходу.
// splat.go
package main
import "os"
import "fmt"
func write(args ...string) {
for _, item := range args {
fmt.Printf("%s\n", item)
}
}
func main() {
write("foobarbaz", os.Args[1:]...)
}
из сообщения об ошибке ясно, что аргумент splatted и простой аргумент не отображаются на один и тот же параметр.
$ go run splat.go
# command-line-arguments
./splat.go:14: too many arguments in call to write