Con trỏ đến struct
Thuộc phần Kiến thức nền tảng trong hành trình GO của Coddy. Bài học 97 trên 109.
Khi làm việc với các struct, bạn có thể tạo con trỏ đến chúng như với các kiểu dữ liệu khác. Cách này hữu ích để truyền các struct lớn một cách hiệu quả.
Định nghĩa một struct Person và tạo con trỏ trỏ đến nó:
type Person struct {
name string
age int
}
func main() {
person := Person{name: "Alice", age: 30}
// Tạo con trỏ trỏ đến struct
personPtr := &person
// Truy cập các trường qua con trỏ
fmt.Println(personPtr.name)
fmt.Println(personPtr.age)
}Kết quả đầu ra cho thấy ta có thể truy cập các trường thông qua con trỏ:
Alice
30Bạn cũng có thể sửa đổi các trường thông qua con trỏ:
personPtr.age = 31
fmt.Println(person.age) // In ra: 31Thử thách
Người mớiTrong thử thách này, bạn sẽ luyện tập làm việc với con trỏ tới cấu trúc trong Go. Bạn có một cấu trúc Person với các trường name và age. Nhiệm vụ của bạn là cập nhật thông tin của người đó bằng con trỏ tới cấu trúc.
Code đã tạo sẵn một cấu trúc Person và một con trỏ tới cấu trúc đó. Bạn cần sửa đổi thông tin của người đó thông qua con trỏ.
Tự làm thử
package main
import "fmt"
// Struct Person có các trường name và age
type Person struct {
name string
age int
}
func main() {
// Tạo một struct Person
person := Person{
name: "John",
age: 25,
}
// Tạo con trỏ trỏ đến struct Person
personPtr := &person
// In ra thông tin ban đầu của người này
fmt.Println("Original person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
// TODO: Dùng con trỏ để đổi tên người này thành "Jane" và tuổi thành 30
// Gợi ý: Bạn có thể truy cập các trường của struct qua con trỏ bằng cú pháp dấu chấm
// In ra thông tin đã cập nhật của người này
fmt.Println("Updated person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
}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 Kiến thức nền tảng
4Toán tử so sánh và logic
Toán tử so sánh, phần 1Toán tử so sánh, phần 2Toán tử AND logicToán tử OR logicToán tử NOT logicCơ bản về thứ tự ưu tiên của toán tửÔn tập: thực hiện phép so sánh7Luồng điều khiển: vòng lặp
Giải thích vòng lặp `for`Vòng lặp `for` cơ bảnVòng lặp `for` chỉ có điều kiệnTừ khóa `break`Từ khóa `continue`Vòng lặp lồng nhauÔn tập: lặp lại hành động10Kiểu dữ liệu tổ hợp: mảng
Giới thiệu về mảngKhai báo mảngKhởi tạo mảngTruy cập phần tử trong mảngĐộ dài mảng với `len`Duyệt qua mảngMảng đa chiều13Kiểu dữ liệu tổng hợp: struct
Định nghĩa kiểu dữ liệu tùy chỉnhTạo các đối tượng structTruy cập các trường của structCon trỏ đến structKhởi tạo structStruct lồng nhauStruct ẩn danhÔn tập: Cấu trúc dữ liệu tùy chỉnh2Biến và các kiểu dữ liệu cơ bản
Biến là gìSuy luận kiểu với `:=`Số nguyên (int)Số dấu phẩy độngGiá trị BooleanChuỗiGiá trị 0Hằng sốQuy ước đặt tênÔn tập: biến và kiểu dữ liệu5Đầu vào/đầu ra cơ bản
Đầu ra có định dạngĐộng từ định dạngIn các kiểu dữ liệuNhận đầu vào cơ bản từ người dùngÔn tập: đầu vào và đầu ra8Hàm
Tìm hiểu về hàmKhai báo hàmGọi hàmTham số của hàmTrả về một giá trịTrả về nhiều giá trịGiá trị trả về có tênNhững điều cơ bản về phạm vi của hàmÔn tập: Tạo code có thể tái sử dụng3Toán tử cơ bản
Toán tử số họcToán tử chiaToán tử moduloToán tử gánToán tử gán kết hợpTăng và giảmÔn tập: Tính toán6Luồng điều khiển: câu lệnh điều kiện
Câu lệnh `if`Từ khóa `else`Từ khóa `else if`Biến bị che khuất trong `if`Khởi tạo biếnCâu lệnh `switch``switch` có biểu thức`switch` không có biểu thứcTừ khóa `fallthrough`Ôn tập: đưa ra quyết địnhTự luyện tập: Trình biên dịch Go online