So sánh Golang struct và Javascript object

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:

  1. Đề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.
  2. 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.

Điểm khác nhau:

Tính năngGolang (struct + method)JavaScript (object)
Hệ thống kiểu dữ liệuKiểu tĩnh (statical typing)Kiểu động (dynamic typing)
Cách định nghĩaDùng struct, khai báo trường dữ liệu cố địnhDùng {} với key-value động
Phương thứcDù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ó compositionHỗ 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ới object.
  • 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.

Leave a Comment