Các hàm Variadic là các hàm chấp nhận số lượng đối số không giới hạn. Thông thường, chúng được thể hiện dưới dạng
func hello(friends ...string) {
// ...
}
Rất dễ nhận ra từ 3 dấu chấm...
.
Chúng tôi có thể gọihello()
như thế này:
hello("tony", "mark", "mary", "joe")
hoặc là:
hello("tony")
hoặc với số lượng chuỗi vô hạn.
Một ví dụ từ thư viện chuẩn:append()
append
là một hàm đa dạng, được định nghĩa là
func append(slice []Type, elems ...Type) []Type
Một cách sử dụng phổ biến là khi loại bỏ một mục tại vị tríi
từ một mảnga
.
a = append(a[:i], a[i+1:]...)
Dòng này tạo một lát cắt mới bằng cách xóa mục tại vị tríi
tronga
, bằng cách kết hợp các mục từ 0 đến i (không bao gồm) và từ i + 1 đến cuối.
Mục đích của...
?
append
chấp nhận một lát cắt làm đối số đầu tiên và không giới hạn số lượng đối số, tất cả đều có một kiểucó thể chuyển nhượngđối với loại phần tử của nó.
Viết
a = append(a[:i], a[i+1:]...)
tương đương với viết
a = append(a[:i], a[i+1], a[i+2], a[i+3], a[i+4]) //and so on, until the end of the slice.
Sử dụnga[i+1:]...
về cơ bản là một cú pháp viết tắt, như thông số Go mô tả tronghttps://golang.org/ref/spec#Passing_arguments_to_..._parameters:
Nếu f biến thiên với tham số cuối cùng p thuộc kiểu… T, thì trong f kiểu của p tương đương với kiểu [] T. Nếu f được gọi mà không có đối số thực sự nào cho p, giá trị được truyền cho p là nil. Nếu không, giá trị được truyền là một lát cắt kiểu mới [] T với một mảng cơ bản mới có các phần tử kế tiếp là các đối số thực tế, tất cả các phần tử này phải được gán cho T
Các hướng dẫn về go khác:
- Sử dụng NGINX Reverse Proxy để phục vụ các dịch vụ Go
- Tạo bản sao của cấu trúc trong Go
- Khái niệm cơ bản về Máy chủ Web Go
- Sắp xếp loại bản đồ trong Go
- Tóm lại về con trỏ
- Giải thích về Thẻ Go
- Định dạng Ngày và Giờ
- Xử lý JSON với Go
- Đi các chức năng đa dạng
- Go Strings Cheat Sheet
- Giải thích về giao diện trống rỗng
- Gỡ lỗi Go với VS Code và Delve
- Named Go trả về các tham số
- Tạo chuỗi và số ngẫu nhiên trong Go
- Cấu trúc hệ thống tệp của một dự án Go
- Thuật toán tìm kiếm nhị phân được triển khai trong Go
- Sử dụng cờ dòng lệnh khi di chuyển
- GOPATH giải thích
- Xây dựng ứng dụng Dòng lệnh với Go: lolcat
- Xây dựng lệnh CLI với Go: coway
- Sử dụng Shell Pipes with Go
- Hướng dẫn về CLI: nhân bản may mắn
- Liệt kê các tệp trong một thư mục với Go
- Sử dụng Go để lấy danh sách các kho từ GitHub
- Tiếp tục, nối một đoạn chuỗi vào một tệp
- Chuyển đổi một chuỗi thành một lát byte
- Hình dung các đóng góp Git địa phương của bạn với Go
- Bắt đầu với Go cấu hình CPU và bộ nhớ
- Giải quyết lỗi "không hỗ trợ lập chỉ mục" trong chương trình Go
- Đo thời gian thực thi trong chương trình cờ vây
- Xây dựng Trình thu thập thông tin web với Go để phát hiện các tiêu đề trùng lặp
- Thực hiện các phương pháp hay nhất: Con trỏ hoặc bộ thu giá trị?
- Thực hiện các phương pháp hay nhất: Bạn nên sử dụng một phương pháp hay một hàm?
- Đi cấu trúc dữ liệu: Đặt
- Go Maps Cheat Sheet
- Tạo triển khai cho các loại chung trong Go
- Truy cập cấu trúc dữ liệu: Từ điển
- Truy cập cấu trúc dữ liệu: Bảng băm
- Triển khai sự kiện Người nghe trong Đi qua các Kênh
- Truy cập cấu trúc dữ liệu: Ngăn xếp
- Truy cập cấu trúc dữ liệu: Hàng đợi
- Đi cấu trúc dữ liệu: Cây tìm kiếm nhị phân
- Đi cấu trúc dữ liệu: Đồ thị
- Truy cập cấu trúc dữ liệu: Danh sách được liên kết
- Hướng dẫn đầy đủ về cấu trúc dữ liệu Go
- So sánh các giá trị Go
- Go có hướng đối tượng không?
- Làm việc với Cơ sở dữ liệu SQL trong Go
- Sử dụng các biến môi trường trong Go
- Xem hướng dẫn: REST API được hỗ trợ bởi PostgreSQL
- Bật CORS trên Máy chủ Web Go
- Triển khai ứng dụng Go trong Docker Container
- Tại sao Go là một ngôn ngữ mạnh mẽ để học với tư cách là một nhà phát triển PHP
- Đi, xóa ký tự dòng mới io.Reader.ReadString
- Bắt đầu, cách xem các thay đổi và xây dựng lại chương trình của bạn
- Đi, đếm tháng kể từ một ngày
- Truy cập thông số HTTP POST trong Go