Điều thú vị đủ, Rob Pike chỉ đề xuất (18 giờ trước) thư viện filter mà không một chút những gì bạn muốn:
Xem for instance Choose()
// Choose takes a slice of type []T and a function of type func(T) bool. (If
// the input conditions are not satisfied, Choose panics.) It returns a newly
// allocated slice containing only those elements of the input slice that
// satisfy the function.
Tested here:
func TestChoose(t *testing.T) {
a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
expect := []int{2, 4, 6, 8}
result := Choose(a, isEven)
Như twotwotwo
points out in the comments, các GoDoc for this library trạng thái:
Gói filter
chứa các chức năng tiện ích để lọc lát thông qua ứng dụng phân phối của một hàm lọc.
Gói là một thử nghiệm để xem việc viết những thứ đó như thế nào trong Go dễ dàng như thế nào. Thật dễ dàng, nhưng for
vòng lặp đơn giản và hiệu quả hơn.
Bạn không nên sử dụng gói này.
caveat này được phản ánh trong tài liệu "Summary of Go Generics Discussions", phần "Functional Code":
Đây là những thông thường higher-order functions như map
, reduce
(fold
), filter
, zip
, vv
Trường hợp:
biến đổi dữ liệu an toàn ns: map
, fold
, zip
Ưu điểm khi sử dụng Generics:
cách ngắn gọn để diễn tả sự biến đổi dữ liệu.
Nhược điểm cho việc sử dụng Generics:
Giải pháp nhanh nhất cần phải đưa vào tài khoản khi nào và ở đó để áp dụng những biến đổi, và bao nhiêu dữ liệu được tạo ra ở mỗi bước.
Khó đọc hơn đối với người mới bắt đầu.
giải pháp thay thế:
sử dụng for
vòng và ngôn ngữ thông thường xây dựng.
Tôi nghĩ thuật ngữ bạn đang tìm kiếm là danh sách python 'comprehension' –
Chỉ cần viết vòng lặp cho mình. Lập trình không bị tổn thương. – Volker
@Volker lý do tại sao các downvote? Bạn không tìm thấy [Tóm tắt các thảo luận về Generics Generics] (https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/mobilebasic?pli=1) có thú vị không? Tài liệu đó bao gồm các đề xuất tương tự như nhận xét của bạn. – VonC