Итак, в Python и Ruby есть оператор splat (*) для распаковки массива в качестве аргументов. В Javascript есть функция .apply (). Есть ли способ распаковки массива / фрагмента в качестве аргументов функции в Go? Любые ресурсы для этого тоже были бы замечательны!
Что-то вроде этого:
func my_func(a, b int) (int) {
return a + b
}
func main() {
arr := []int{2,4}
sum := my_func(arr)
}
Прошу прощения, если я допускаю синтаксические / различные ошибки. Я новичок в Go.
go
argument-unpacking
Eatonphil
источник
источник
arr
это не массив. Это кусок .Ответы:
Вы можете использовать синтаксис vararg, аналогичный C:
Теперь вы можете суммировать столько вещей, сколько захотите. Обратите внимание на важное
...
после, когда вы вызываетеmy_func
функцию.Пример выполнения: http://ideone.com/8htWfx
источник
Либо ваша функция - varargs, в которой вы можете использовать срез с
...
обозначением, как показывает Хантер МакМиллен, либо ваша функция имеет фиксированное количество аргументов, и вы можете распаковать их при написании кода.Если вы действительно хотите сделать это динамически для функции фиксированного количества аргументов, вы можете использовать отражение:
источник
https://play.golang.org/p/2nN6kjHXIsd
У меня была причина распаковать некоторые вары из строки map [string] с одинарными кавычками вокруг некоторых из них, а также без них. Вот логика для этого, и ссылка на воспроизведение вверху имеет полный рабочий фрагмент.
Что чисто для запроса mssql выглядит как:
источник
Нет, для этого нет прямой поддержки в языке. Python и Ruby, а также упоминаемый вами Javascript; все являются динамическими языками / языками сценариев. Go гораздо ближе, например, к C, чем к любому динамическому языку. Функциональность «применить» удобна для динамических языков, но мало полезна для статических языков, таких как C или Go,
источник