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,
structgiúp tổ chức dữ liệu có liên quan, tương tự nhưobjecttrong 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
structbằng cách sử dụng receiver. - Trong JavaScript, bạn có thể định nghĩa phương thức trong
objectdướ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à AliceTóm tắt
- Golang sử dụng
structvớ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
receiverkhi đị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.