Golang OOP
Mặc dù Golang không hỗ trợ lập trình hướng đối tượng (OOP) theo cách truyền thống như Java hay C++, nhưng nó vẫn cung cấp các công cụ mạnh mẽ để thực hiện các nguyên tắc OOP thông qua struct
, interface
, method receiver
, và interface embedding.
1. Hiểu về struct
và interface
struct
và interface
📌 struct
Golang không có class
, nhưng struct
đóng vai trò tương đương. Nó cho phép bạn tạo ra các đối tượng có thuộc tính (fields).
Ví dụ:
📌 interface
interface
trong Go giúp định nghĩa hành vi mà một kiểu dữ liệu phải tuân theo mà không cần kế thừa.
2. Method Receiver (value receiver
vs pointer receiver
)
value receiver
vs pointer receiver
)Trong Golang, bạn có thể định nghĩa method cho struct
với hai loại receiver:
📌 Value receiver
(bản sao của giá trị)
Method sử dụng value receiver sẽ nhận một bản sao của struct, tức là thay đổi trên bản sao này không ảnh hưởng đến struct gốc.
📌 Pointer receiver
(truy cập trực tiếp vào đối tượng gốc)
Dùng khi bạn muốn thay đổi giá trị của struct hoặc tránh copy struct lớn.
Khi nào dùng pointer receiver
?
Khi method cần thay đổi giá trị của struct.
Khi struct quá lớn, tránh copy tốn bộ nhớ.
3. Kế thừa bằng Interface Embedding
Go không hỗ trợ kế thừa như OOP truyền thống nhưng có interface embedding, cho phép một interface có thể chứa interface khác.
Ví dụ:
🔹 Lợi ích của Interface Embedding:
Dễ dàng mở rộng hành vi mà không cần kế thừa.
Linh hoạt hơn trong thiết kế hệ thống.
4. Polymorphism và Dependency Injection trong Go
📌 Polymorphism (Tính đa hình)
Polymorphism trong Go được thực hiện qua interface, cho phép một hàm xử lý nhiều kiểu khác nhau.
Ví dụ:
📌 Dependency Injection (DI) trong Go
Golang không có DI container như Spring (Java), nhưng có thể thực hiện DI bằng cách truyền dependencies qua constructor hoặc setter.
Ví dụ:
🔹 Lợi ích của DI trong Go:
Dễ dàng thay thế dependencies (ví dụ: thay đổi từ Database sang API).
Code dễ kiểm thử hơn (mock dependencies trong unit test).
🔥 Tóm Tắt
✅ Struct & Interface giúp tổ chức dữ liệu và hành vi mà không cần kế thừa.
✅ Method Receiver (value receiver
vs pointer receiver
) giúp kiểm soát cách struct tương tác với method.
✅ Interface Embedding thay thế kế thừa trong Go, giúp mở rộng hành vi linh hoạt hơn.
✅ Polymorphism được thực hiện qua interface, giúp code dễ mở rộng.
✅ Dependency Injection giúp code dễ bảo trì và kiểm thử hơn.
Last updated