2012-04-12 36 views

Trả lời

25

Điều đó có nghĩa là bạn có thể gọi Statusln bằng variable number of arguments. Ví dụ, gọi hàm này với:

Statusln("hello", "world", 42) 

sẽ gán các thông số một giá trị sau:

a := []interface{}{"hello", "world", 42} 

Vì vậy, bạn có thể lặp lại trên mảnh đất này a và xử lý tất cả các thông số, dù có bao nhiêu đó là. Một trường hợp sử dụng tốt và phổ biến cho các đối số variadic là ví dụ fmt.Printf() lấy một chuỗi định dạng và một số biến các đối số sẽ được định dạng theo chuỗi định dạng.

+0

+1, Cảm ơn bạn đã liên kết đến tài liệu, – Ali

+0

FYI. Nếu bạn đã có nhiều arg trong một slice, áp dụng chúng vào một hàm variadic bằng cách sử dụng 'func (slice ...)' như 'Statusln (a ...)' trong ví dụ trên. – thuzhf

5

Đó là lập luận chiều dài biến

func Printf(format string, v ...interface{}) (n int, err error) { 

Đưa ví dụ chữ ký này. Ở đây chúng ta xác định rằng chúng ta có một chuỗi in, nhưng chuỗi này có thể interpolated với số biến của sự vật (loại tùy ý) để substitude (trên thực tế, tôi mất chức năng này từ gói fmt):

fmt.Printf("just i: %v", i) 
fmt.Printf("i: %v and j: %v",i,j) 

Như bạn có thể thấy ở đây, với các đối số variadic, một chữ ký phù hợp với tất cả các độ dài.

Hơn nữa, bạn có thể chỉ định một số loại chính xác như ...int.

+1

có nghĩa là gì? rằng số lượng đối số không được chỉ định? – Chaos

+0

@shailesh Tôi đã thêm ví dụ –

+0

@ om-nom-nom Xin cảm ơn, bây giờ là khá rõ ràng – Chaos

Các vấn đề liên quan