Tôi đã đọc qua Hướng dẫn Go và Go hiệu quả cũng như một số nguồn, nhưng cơ chế chính xác đằng sau cú pháp interface {}
là Go có phần hơi bí ẩn đối với tôi. Lần đầu tiên tôi nhìn thấy nó khi cố gắng để thực hiện heap.Interface
và nó có vẻ là một container của một số loại (nhắc nhở tôi về một monad một chút) mà từ đó tôi có thể trích xuất các giá trị của loại tùy ý.Vai trò của cú pháp "interface {}" trong Go là gì?
Tại sao lại được viết để sử dụng? Có một số loại workaround cho generics? Có cách nào thanh lịch hơn để nhận các giá trị từ một số heap.Interface
hơn là phải bỏ qua chúng với heap.Pop(&h).(*Foo)
(trong trường hợp của một con trỏ heap để nhập Foo) không?
Ahh, đó là một loại ẩn danh! OK, cảm ơn! Tôi đoán tôi sẽ sử dụng một số loại phản ánh để truy vấn loại được giữ. Tôi chưa từng làm việc với phần đó; cho đến nay tôi đã chỉ sử dụng cú pháp (lẻ, với tôi) '. ()' để lấy lại các giá trị. –
Có một gói phản ánh có thể cho phép bạn truy vấn loại hoặc bạn có thể sử dụng công tắc loại, trông giống như công tắc thông thường nhưng các trường hợp là loại. Hoặc bạn chỉ có thể sử dụng phiên bản không xác thực của xác nhận loại (ví dụ: 'value, ok: = foo. (Type)') –