Hướng dẫn viết mã hướng đối tượng trong Go

tsudev· 15/09/2026

Giới thiệu về lập trình hướng đối tượng trong Go

Lập trình hướng đối tượng là một phương pháp thiết kế và phát triển phần mềm tập trung vào việc tạo ra các đối tượng và lớp để đại diện cho các thực thể và hành vi trong hệ thống. Trong Go, mặc dù không hỗ trợ các lớp và kế thừa như các ngôn ngữ khác, nhưng nó vẫn cho phép thiết kế hướng đối tượng bằng cách sử dụng các cấu trúc khác nhau.

Sử dụng Structs

Trong Go, struct là một loại dữ liệu được sử dụng để định nghĩa một tập hợp các trường và phương thức. Một struct có thể được xem như một lớp trong các ngôn ngữ khác, nhưng nó không hỗ trợ kế thừa. Ví dụ, chúng ta có thể định nghĩa một struct để đại diện cho một người như sau:
go
type Person struct {
    name string
    age  int
}
Chúng ta có thể tạo một thể hiện của struct này và truy cập vào các trường của nó như sau:
go
person := Person{name: "John", age: 30}
fmt.Println(person.name) // In ra "John"
fmt.Println(person.age)  // In ra 30

Sử dụng Methods

Trong Go, method là một hàm được gắn với một loại dữ liệu cụ thể. Một method có thể được sử dụng để thực hiện các hành vi trên một đối tượng. Ví dụ, chúng ta có thể định nghĩa một method để in ra thông tin của một người như sau:
go
func (p Person) printInfo() {
    fmt.Printf("Tên: %s, Tuổi: %d\n", p.name, p.age)
}
Chúng ta có thể gọi method này trên một thể hiện của struct như sau:
go
person := Person{name: "John", age: 30}
person.printInfo() // In ra "Tên: John, Tuổi: 30"

Sử dụng Interfaces

Trong Go, interface là một loại dữ liệu được sử dụng để định nghĩa một tập hợp các phương thức. Một interface có thể được sử dụng để định nghĩa một hợp đồng mà một loại dữ liệu phải thực hiện. Ví dụ, chúng ta có thể định nghĩa một interface để đại diện cho một đối tượng có thể được in ra như sau:
go
type Printable interface {
    printInfo()
}
Chúng ta có thể thực hiện interface này trên một struct như sau:
go
type Person struct {
    name string
    age  int
}

func (p Person) printInfo() {
    fmt.Printf("Tên: %s, Tuổi: %d\n", p.name, p.age)
}

Sử dụng Composition

Trong Go, composition là một kỹ thuật được sử dụng để tạo ra một loại dữ liệu mới bằng cách kết hợp các loại dữ liệu khác. Ví dụ, chúng ta có thể định nghĩa một struct để đại diện cho một trường học như sau:
go
type School struct {
    name string
    students []Person
}
Chúng ta có thể tạo một thể hiện của struct này và truy cập vào các trường của nó như sau:
go
school := School{name: "Trường học XYZ", students: []Person{{name: "John", age: 30}, {name: "Jane", age: 25}}}
fmt.Println(school.name) // In ra "Trường học XYZ"
fmt.Println(school.students) // In ra [{John 30} {Jane 25}]

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu cách viết mã hướng đối tượng trong Go bằng cách sử dụng các cấu trúc khác nhau như struct, method, interface và composition. Mặc dù Go không hỗ trợ các lớp và kế thừa như các ngôn ngữ khác, nhưng nó vẫn cho phép thiết kế hướng đối tượng một cách linh hoạt và hiệu quả. Để tiếp tục, bạn nên thử nghiệm với các ví dụ trên và tìm hiểu thêm về các tính năng của Go.

Nguồn tham khảo: https://dev.to/puffball1567/how-to-write-object-oriented-code-in-go-structs-methods-interfaces-and-composition-3fok