Wikipedia: Variadic function
A function's last parameter can collect any number of extra arguments by prefixing it with .... Inside the function the variadic parameter is a plain array. The spread operator ... on a call site expands an array into individual arguments.
fmt := import("fmt")
sum := func(...nums) {
total := 0
for _, v in nums { total += v }
return total
}
fmt.println(sum()) // 0 — variadic may be empty
fmt.println(sum(1, 2, 3)) // 6
fmt.println(sum(1, 2, 3, 4, 5)) // 15
tag := func(name, ...attrs) {
s := "<" + name
for _, a in attrs { s += " " + a }
return s + ">"
}
fmt.println(tag("br"))
fmt.println(tag("input", `type="text"`, `required`))
nums := [10, 20, 30]
fmt.println(sum(nums...)) // 60
fmt.println(sum(1, nums...)) // 61 — fixed arg followed by spread
logger := func(prefix) {
return func(...parts) {
msg := prefix + ": "
for i, p in parts {
if i > 0 { msg += " " }
msg += string(p)
}
fmt.println(msg)
}
}
warn := logger("WARN")
warn("disk", "usage", "high")
warn("retries:", 3)
try it
0 6 15 <br> <input type="text" required> 60 61 WARN: disk usage high WARN: retries: 3