Trong Go, struct (cấu trúc) là một kiểu dữ liệu cho phép bạn nhóm nhiều trường (fields) lại với nhau, có thể là các kiểu dữ liệu khác nhau. Việc khởi tạo một struct có thể được thực hiện bằng nhiều cách khác nhau, tùy thuộc vào nhu cầu của bạn. Dưới đây là hướng dẫn chi tiết về cách khởi tạo một struct trong Go.

1. Định Nghĩa Struct

Trước khi khởi tạo, bạn cần định nghĩa một struct. Dưới đây là cú pháp để định nghĩa một struct:

type Person struct {
    Name    string
    Age     int
    Address string
}

Trong ví dụ này, Person là một struct với ba trường: Name, Age, và Address.

2. Cách Khởi Tạo Struct

a. Khởi Tạo Bằng Cách Khai Báo Trực Tiếp

Bạn có thể khởi tạo một struct bằng cách tạo một biến của kiểu struct và gán giá trị cho các trường.

func main() {
    // Khởi tạo một struct bằng cách khai báo trực tiếp
    person1 := Person{
        Name:    "John Doe",
        Age:     30,
        Address: "123 Main St",
    }

    fmt.Println(person1)
}

b. Khởi Tạo Sử Dụng Từ Khóa new

Sử dụng từ khóa new để khởi tạo một struct cũng là một cách phổ biến. Cách này trả về một con trỏ đến struct đã khởi tạo.

func main() {
    // Sử dụng new để khởi tạo một struct
    person2 := new(Person)
    person2.Name = "Jane Doe"
    person2.Age = 25
    person2.Address = "456 Park Ave"

    fmt.Println(*person2) // Giải dereference để lấy giá trị
}

c. Khởi Tạo với Các Giá Trị Mặc Định

Khi bạn khởi tạo một struct, nếu không gán giá trị cho một trường nào đó, trường đó sẽ được gán giá trị mặc định tương ứng với kiểu dữ liệu của nó (0 cho int, “” cho string, nil cho các kiểu tham chiếu).

func main() {
    // Khởi tạo struct mà không gán giá trị cho tất cả các trường
    person3 := Person{}

    fmt.Println(person3) // Kết quả: { 0 }
}

d. Khởi Tạo Sử Dụng Con Trỏ

Bạn cũng có thể khởi tạo một struct và gán cho nó một con trỏ.

func main() {
    // Khởi tạo một struct và gán cho con trỏ
    person4 := &Person{
        Name:    "Alice",
        Age:     28,
        Address: "789 Elm St",
    }

    fmt.Println(*person4) // Giải dereference để lấy giá trị
}

3. Kết Hợp Structs Khác Nhau

Bạn có thể lồng struct vào trong các struct khác để tạo ra cấu trúc phức tạp hơn.

type Company struct {
    Name    string
    Address string
    Owner   Person // Lồng struct Person vào struct Company
}

func main() {
    owner := Person{Name: "Bob", Age: 40, Address: "321 Oak St"}
    company := Company{Name: "Tech Corp", Address: "987 Business Rd", Owner: owner}

    fmt.Println(company)
}

4. Kết Luận

Việc khởi tạo một struct trong Go rất linh hoạt và có thể được thực hiện qua nhiều cách khác nhau. Bạn có thể khởi tạo trực tiếp, sử dụng từ khóa new, hay thậm chí là thông qua con trỏ. Struct là một phần quan trọng trong lập trình Go, giúp bạn tổ chức và quản lý dữ liệu một cách hiệu quả. Việc hiểu rõ cách khởi tạo và sử dụng struct sẽ giúp bạn xây dựng các ứng dụng Go phức tạp hơn một cách dễ dàng.