Khi so sánh Golang và Javascript, struct
và phương thức (method) (trong Golang) hoạt động tương tự như object
trong JavaScript, nhưng cũng có những điểm khác biệt quan trọng.
Điểm giống nhau:
- Đều dùng để nhóm dữ liệu liên quan lại với nhau
- Trong Go,
struct
giúp tổ chức dữ liệu có liên quan, tương tự nhưobject
trong JavaScript. - Cả hai đều cho phép định nghĩa phương thức để thao tác với dữ liệu.
- Trong Go,
- Có thể gán phương thức cho cấu trúc dữ liệu
- Trong Go, bạn có thể định nghĩa phương thức trên
struct
bằng cách sử dụng receiver. - Trong JavaScript, bạn có thể định nghĩa phương thức trong
object
dưới dạng thuộc tính chứa hàm.
- Trong Go, bạn có thể định nghĩa phương thức trên
Điểm khác nhau:
Tính năng | Golang (struct + method) | JavaScript (object ) |
---|---|---|
Hệ thống kiểu dữ liệu | Kiểu tĩnh (statical typing) | Kiểu động (dynamic typing) |
Cách định nghĩa | Dùng struct , khai báo trường dữ liệu cố định | Dùng {} với key-value động |
Phương thức | Dùng hàm có receiver (func (p Person) Greet() ) | Gán trực tiếp một hàm vào thuộc tính của object (greet: function() {} ) |
Kế thừa (Inheritance) | Không có kế thừa cổ điển, chỉ có composition | Hỗ trợ kế thừa dựa trên prototype |
Golang struct
package main import "fmt" // Định nghĩa struct type Person struct { Name string Age int } // Định nghĩa phương thức cho struct Person func (p Person) Greet() { fmt.Println("Xin chào, tôi tên là", p.Name) } func main() { p := Person{Name: "Alice", Age: 25} p.Greet() // Output: Xin chào, tôi tên là Alice }
JavaScript object
// Định nghĩa object const person = { name: "Alice", age: 25, greet: function () { console.log("Xin chào, tôi tên là " + this.name); } }; person.greet(); // Output: Xin chào, tôi tên là Alice
Tóm tắt
- Golang sử dụng
struct
với kiểu dữ liệu cố định, trong khi JavaScript linh hoạt hơn vớiobject
. - Golang không có kế thừa (inheritance) như JavaScript, mà sử dụng composition (thành phần ghép lại).
- Golang yêu cầu sử dụng
receiver
khi định nghĩa phương thức cho struct, trong khi JavaScript chỉ cần gán hàm vào thuộc tính.