Trong Hướng dẫn ngôn ngữ Go, họ giải thích cách các giao diện hoạt động:
Đi không có lớp. Tuy nhiên, bạn có thể định nghĩa các phương thức trên các kiểu cấu trúc. Trình nhận phương thức xuất hiện trong danh sách đối số riêng giữa từ khóa func và tên phương thức.
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
Một loại giao diện được xác định bởi một tập hợp các phương thức. Một giá trị của loại giao diện có thể chứa bất kỳ giá trị nào thực hiện các phương thức đó.
Đây là cách duy nhất để tạo giao diện trong Go. Google giải thích thêm rằng:
Một kiểu thực hiện một giao diện bằng cách thực hiện các phương thức. Không có tuyên bố rõ ràng về ý định [tức là
interface
tuyên bố].Các giao diện ngầm định tách các gói triển khai khỏi các gói xác định các giao diện: không phụ thuộc vào các giao diện khác.
Nó cũng khuyến khích định nghĩa về các giao diện chính xác, bởi vì bạn không phải tìm mọi cách triển khai và gắn thẻ nó với tên giao diện mới.
Tất cả điều này nghe có vẻ đáng ngờ giống như Phương thức mở rộng trong C # , ngoại trừ các phương thức trong Go là đa hình một cách tàn nhẫn; họ sẽ hoạt động trên bất kỳ loại nào thực hiện chúng.
Google tuyên bố rằng điều này khuyến khích sự phát triển nhanh chóng, nhưng tại sao? Bạn có từ bỏ một cái gì đó bằng cách di chuyển khỏi các giao diện rõ ràng trong C #? Các phương thức mở rộng trong C # có thể cho phép một người rút ra một số lợi ích mà giao diện Go có trong C # không?