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) // DianaDùng var rồi gán các trường
var p6 Person
p6.Name = "Eve"
p6.Age = 22Khở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.
Thử thách
Trung bìnhTạ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)
}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
1Nền tảng OOP trong Go
Tệp bên ngoàiWorkspace và module trong GoPackage và importTên được export và không được exportGiới thiệu về OOP trong GoStruct như lớpĐịnh nghĩa phương thức cho structReceiver kiểu con trỏ và kiểu giá trịKhởi tạo structHàm khởi tạoÔn tập: máy tính đơn giản4Interface
Giới thiệu về interfaceTriển khai ngầm địnhInterface như một hợp đồngInterface rỗng (any)Khẳng định kiểuswitch kiểuKết hợp interfaceInterface Stringer và ErrorÔn tập: Máy tính hình học7Tính đóng gói
Trường được xuất và không được xuấtĐóng gói ở cấp packagePhương thức getter và setterẨn thông tin trong GoÔn tập: hồ sơ học sinh10Generics (Go 1.18 trở lên)
Giới thiệu về GenericsTham số kiểuRàng buộc kiểuStruct tổng quátGiải pháp thay thế cho phương thức tổng quátÔn tập: tập hợp tổng quát13Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếMẫu SingletonMẫu FactoryMẫu Abstract FactoryMẫu ObserverMẫu Strategy2Tìm hiểu chuyên sâu về kiểu dữ liệu và struct
Kiểu cơ bản và kiểu tổng hợpĐịnh nghĩa kiểu dữ liệu tùy chỉnhThẻ structStruct ẩn danhStruct lồng nhauGiá trị zero và giá trị mặc địnhÔn tập: sổ liên lạc5Ưu tiên kết hợp hơn kế thừa
Vì sao Go không có kế thừaNhập môn nhúng structTự động nâng phương thứcNhúng nhiều structNhúng và kết tậpChe khuất phương thức được nhúngÔn tập: hệ phân cấp nhân viên8Xử lý lỗi và lập trình hướng đối tượng
Giao diện errorCác kiểu lỗi tùy chỉnhBọc lỗi với fmt.ErrorfLỗi sentinelerrors.Is() và errors.As()Panic, defer và recoverÔn tập: trình phân tích tệp3Con trỏ và bộ nhớ
Cơ bản về con trỏ trong GoCon trỏ đến structTruyền theo giá trị và tham chiếuHàm new()Thu gom rác trong GoÔn tập: xây dựng danh sách liên kết6Đa hình trong Go
Đa hình qua interfaceĐịnh kiểu vịt trong GoQuy tắc thỏa mãn interfaceCác tập hợp đa hìnhTiêm phụ thuộcÔn tập: bộ xử lý thanh toán9Lập trình đồng thời và lập trình hướng đối tượng
Cơ bản về goroutineChannel và giao tiếpChannel có bộ đệm và không có bộ đệmCâu lệnh selectsync.Mutex và sync.RWMutexsync.WaitGroupThiết kế struct an toàn luồngÔn tập: worker poolTự luyện tập: Trình biên dịch Go online