Мовою Go,
[]string - це масив рядків
і ми також використовуємо ...stringяк параметр.
Яка різниця?
Визначення функції:
func f(args ...string) {}
Чи можу я викликати цю функцію, як показано нижче?
args := []string{"a", "b"}
f(args)
Мовою Go,
[]string - це масив рядків
і ми також використовуємо ...stringяк параметр.
Яка різниця?
Визначення функції:
func f(args ...string) {}
Чи можу я викликати цю функцію, як показано нижче?
args := []string{"a", "b"}
f(args)
Відповіді:
[]string- це масив рядків
Технічно це фрагмент, який посилається на базовий масив
і ми також використовуємо
...stringяк параметр.Яка різниця?
Що стосується структури, то насправді нічого. Тип даних, отриманий з обох синтаксисів, однаковий.
...Синтаксис параметра робить VARIADIC параметр. Він прийме нуль або більше stringаргументів і посилатиметься на них як на фрагмент.
Що стосується виклику f, ви можете передати фрагмент рядків у параметр variadic із таким синтаксисом:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Цей синтаксис доступний або для фрагмента, побудованого за допомогою буквального синтаксису, або для фрагмента, що представляє варіадичний параметр (оскільки насправді між ними немає різниці) .
[]stringсинтаксису. Я додаю ще цитату до своєї відповіді, щоб вона стала зрозумілішою. :-)
Обидва створюють масив рядків, але різниця полягає в тому, як він називається.
func f(args ...string) {
}
// Would be called like this:
f("foo","bar","baz");
Це дозволяє приймати змінну кількість аргументів (усіх одного типу)
Прекрасним прикладом цього є fmt.Printі друзі, які можуть прийняти скільки завгодно або стільки порушень.
def fn(*args)конструкції python .
Ось що ви хочете:
var args []string = []string{"A", "B", "C"}
func Sample(args ...string) {
for _, arg := range args {
fmt.Println(arg)
}
}
func main() {
Sample(args...)
}
Це спрощує параметри функцій. Ось приклад ( https://play.golang.org/p/euMuy6IvaM ): Метод SampleEllipsis приймає від нуля до багатьох параметрів того самого типу, але в методі SampleArray це обов'язкові аргументи, які потрібно оголосити.
package main
import "fmt"
func SampleEllipsis(args ...string) {
fmt.Printf("Sample ellipsis : %+v\n",args)
}
func SampleArray(args []string) {
fmt.Println("Sample array ")
SampleEllipsis(args...)
}
func main() {
// Method one
SampleEllipsis([]string{"A", "B", "C"}...)
// Method two
SampleEllipsis("A", "B", "C")
// Method three
SampleEllipsis()
// Simple array
SampleArray([]string{"A", "B", "C"})
// Simple array
SampleArray([]string{})
}
Повернення:
Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []
[]stringє фрагментом, а не масивом. Відмінності між масивом та фрагментом незначні, але важливі.