Go Interface: Detect Impliment
Thường xuyên thấy một số cách sử dụng kỳ lạ như sau trong các thư viện mã nguồn mở:
Khi gặp điều này, có thể cảm thấy mơ hồ và không biết tác giả đang muốn làm gì. Thực tế, đây chính là câu trả lời cho vấn đề này. Trình biên dịch sẽ kiểm tra xem kiểu *myWriter
có thực hiện giao diện io.Writer
hay không.
Hãy xem một ví dụ:
Sau khi chú thích phần định nghĩa hàm Write cho myWriter, chạy chương trình:
Thông báo lỗi: *myWriter/myWriter không thực hiện giao diện io.Writer, tức là không có phương thức Write.
Bỏ chú thích và chạy chương trình, không có lỗi.
Thực tế, câu gán trên sẽ chuyển đổi kiểu một cách ngầm định, trong quá trình chuyển đổi, trình biên dịch sẽ kiểm tra xem kiểu bên phải của dấu bằng có thực hiện các hàm được quy định trong giao diện bên trái hay không.
Tóm lại, có thể thêm mã tương tự như sau vào mã nguồn để kiểm tra xem kiểu có thực hiện giao diện hay không: