Tên được export và không được export
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 4 trên 107.
Trong Go, chữ cái đầu tiên của một tên quyết định khả năng hiển thị của tên đó. Tên bắt đầu bằng chữ in hoa là được xuất (có thể truy cập từ các package khác). Tên bắt đầu bằng chữ thường là không được xuất (chỉ dùng riêng trong package).
Tên được export: có thể thấy bên ngoài package
type User struct {
Name string // Trường công khai
Email string // Trường công khai
}
func CreateUser(name string) User { // Hàm công khai
return User{Name: name}
}Tên không được xuất: chỉ hiển thị bên trong package
type secret struct { // Cấu trúc không được xuất
password string // Trường không được xuất
}
func validate() bool { // Hàm không được xuất
return true
}Kết hợp: struct được export với một số trường không được export
type Account struct {
Username string // Được xuất ra, có thể truy cập ở mọi nơi
Email string // Được xuất ra, có thể truy cập ở mọi nơi
password string // Không được xuất ra, chỉ có thể truy cập trong package
}Quy ước đặt tên này thay thế các từ chỉ quyền truy cập như public và private trong các ngôn ngữ khác.
// Chữ cái viết hoa = Được xuất ra (công khai)
// Chữ cái viết thường = Không xuất ra (riêng tư)
func SaveData() {} // Được xuất ra
func loadData() {} // Không xuất raTuân theo quy ước này rất quan trọng trong Go. Khi các package khác nhập code của bạn, chúng chỉ có thể truy cập những tên bắt đầu bằng chữ cái viết hoa.
Thử thách
Trung bìnhSửa tất cả tên trong product.go để tuân theo quy ước đặt tên được xuất của Go. Viết hoa chữ cái đầu tiên của:
- Tên struct:
product→Product - Tất cả tên trường:
name,price,stock - Tất cả tên hàm:
totalValue,displayInfo - Tất cả tham chiếu đến trường bên trong các hàm
Tự làm thử
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}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