Định nghĩa interface
Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 13 trên 68.
Giờ bạn đã hiểu khái niệm giao diện (interface), hãy tìm hiểu cách định nghĩa giao diện trong Go. Để định nghĩa giao diện, hãy dùng từ khóa interface, theo sau là một tập hợp chữ ký phương thức (method) đặt trong dấu ngoặc nhọn.
Đây là cú pháp cơ bản để định nghĩa một giao diện (interface):
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Lưu ý rằng một giao diện chỉ chứa các chữ ký phương thức, gồm tên phương thức, tham số và kiểu trả về, nhưng không có phần triển khai. Giao diện không quy định các phương thức này phải hoạt động như thế nào, mà chỉ nêu những phương thức nào cần tồn tại.
Ví dụ, sau đây là cách bạn định nghĩa một giao diện Shaper đơn giản, yêu cầu mọi kiểu triển khai giao diện này phải có phương thức Area:
type Shaper interface {
Area() float64
}Giao diện này xác lập một hợp đồng: bất kỳ kiểu nào muốn được xem là Shaper đều phải có phương thức Area không nhận tham số và trả về float64. Giao diện không quan tâm kiểu đó là gì hay cách nó tính diện tích, mà chỉ quan tâm phương thức có tồn tại và đúng chữ ký hay không.
Thử thách
DễTrong thử thách này, bạn sẽ luyện tập định nghĩa giao diện trong Go bằng cách tạo một hệ thống trình phát đa phương tiện đơn giản. Bạn sẽ định nghĩa một giao diện thiết lập hợp đồng cho các loại thiết bị đa phương tiện khác nhau.
Bạn sẽ nhận một đầu vào:
- Một chuỗi biểu thị thao tác đa phương tiện, ví dụ:
"play","pause"hoặc"stop"
Nhiệm vụ của bạn là:
- Định nghĩa một giao diện có tên
MediaPlayervới ba chữ ký phương thức:Play()trả về một chuỗiPause()trả về một chuỗiStop()trả về một chuỗi
- Dựa trên thao tác đầu vào, in chữ ký phương thức tương ứng từ giao diện
MediaPlayertheo định dạng:"MediaPlayer interface requires: [MethodName]() string"
Chương trình này chưa dùng đến MediaPlayer, điều đó không sao: Go vẫn biên dịch giao diện ngay cả khi chưa có kiểu nào triển khai nó. Các câu lệnh in chỉ báo chữ ký phương thức mà giao diện yêu cầu cho thao tác đã cho. Trong bài học tiếp theo, bạn sẽ tạo một kiểu triển khai MediaPlayer và gọi các phương thức của kiểu đó.
Tên phương thức cần viết hoa chữ cái đầu (để được xuất ra), vì chúng là một phần trong định nghĩa giao diện. Với đầu vào "play", hãy in "MediaPlayer interface requires: Play() string", với "pause" hãy in "MediaPlayer interface requires: Pause() string", và với "stop" hãy in "MediaPlayer interface requires: Stop() string".
Thử thách này tập trung vào khái niệm cơ bản về định nghĩa giao diện bằng chữ ký phương thức, qua đó thiết lập hợp đồng mà mọi kiểu triển khai giao diện phải tuân theo.
Tự làm thử
package main
import "fmt"
func main() {
// Đọc đầu vào
var action string
fmt.Scanln(&action)
// TODO: Định nghĩa interface MediaPlayer tại đây
// TODO: Viết code bên dưới để xử lý action và in ra đầu ra theo yêu cầu
// In ra kết quả
// Nhớ in ra theo định dạng: "MediaPlayer interface requires: [MethodName]() string"
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Luồng điều khiển nâng cao
Switch với `fallthrough`Thoát khỏi vòng lặp lồng nhauTiếp tục một vòng lặp cụ thểCâu lệnh `goto`Ôn tập: điều khiển vòng lặp nâng cao4Dự án: Danh sách việc cần làm đơn giản
Thiết lập dự ánThêm một việc cần làm2Struct và phương thức
Định nghĩa phương thức cho structReceiver giá trịReceiver con trỏChọn receiverPhương thức và hàmÔn tập: hành vi của struct5Tìm hiểu chuyên sâu về map
Map chứa structCon trỏ làm giá trị của mapKiểm tra map nilSo sánh các mapÔn tập: bộ đếm tần suất từ8Dự án: Quản lý hàng tồn kho đơn giản
Tổng quan dự ánKiểm tra hàng tồn kho3Interface (cơ bản)
Interface là gì?Định nghĩa interfaceTriển khai interfaceDùng kiểu interfaceInterface rỗngKhẳng định kiểuType switchÔn tập: hình dạng và hành viTự luyện tập: Trình biên dịch Go online