Menu
CoddyTech

Khởi tạo struct

Thuộc phần Lập trình hướng đối tượng trong hành trình GO của Coddy. Bài học 9 trên 107.

Go có nhiều cách khởi tạo struct, mỗi cách hữu ích trong những tình huống khác nhau.

Khởi tạo trường có tên

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Khởi tạo theo vị trí (thứ tự phải khớp với khai báo trường)

p2 := Person{"Bob", 30, "London"}

Khởi tạo bằng giá trị không (mọi trường đều nhận giá trị mặc định)

p3 := Person{}
// Name: "", Age: 0, City: ""

Khởi tạo một phần (các trường chưa thiết lập nhận giá trị 0)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Con trỏ đến struct bằng &

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

Dùng var rồi gán các trường

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Khởi tạo trường có tên là cách phổ biến và dễ đọc nhất. Dùng & khi bạn cần con trỏ đến struct.

challenge icon

Thử thách

Trung bình

Tạo ba đối tượng Player bằng các phương thức khởi tạo khác nhau:

  • player1: Khởi tạo các trường có tên bằng giá trị đầu vào
  • player2: Khởi tạo các trường có tên với Name: "Guest", Class: "Novice", HitPoints: 50
  • player3: Khai báo bằng var, sau đó gán riêng từng trường

Tự làm thử

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: Tạo player1 bằng cách khởi tạo các trường theo tên với các giá trị đầu vào

    // TODO: Tạo player2 bằng cách khởi tạo các trường theo tên:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: Tạo player3 bằng câu lệnh khai báo var, rồi gán giá trị cho các trường:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Go online