Dưới đây là 3 gợi ý hoặc kỹ thuật khác:
Với một trường bổ sung
Bạn có thể thêm một trường bổ sung để cho biết liệu cấu trúc đã được điền hay chưa. Tôi cố ý đặt tên cho nó ready
chứ không phải empty
vì giá trị 0 của a bool
là false
, vì vậy nếu bạn tạo một cấu trúc mới như trường Session{}
của nó ready
sẽ tự động false
và nó sẽ cho bạn biết sự thật: rằng cấu trúc chưa sẵn sàng (nó trống).
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Khi bạn khởi tạo cấu trúc, bạn phải đặt ready
thành true
. isEmpty()
Phương thức của bạn không còn cần thiết nữa (mặc dù bạn có thể tạo một phương thức nếu muốn) vì bạn chỉ có thể kiểm tra ready
chính trường đó.
var s Session
if !s.ready {
// do stuff (populate s)
}
Tầm quan trọng của một bool
trường bổ sung này tăng lên khi cấu trúc lớn hơn hoặc nếu nó chứa các trường không thể so sánh được (ví dụ: map
giá trị lát cắt và hàm).
Sử dụng giá trị 0 của một trường hiện có
Điều này tương tự như gợi ý trước đó, nhưng nó sử dụng giá trị 0 của trường hiện có được coi là không hợp lệ khi cấu trúc không trống. Khả năng sử dụng của điều này phụ thuộc vào việc thực hiện.
Ví dụ: nếu trong ví dụ của bạn playerId
không được để trống string
""
, bạn có thể sử dụng nó để kiểm tra xem cấu trúc của bạn có trống không như sau:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
Trong trường hợp này, nên kết hợp kiểm tra này vào một isEmpty()
phương pháp vì kiểm tra này phụ thuộc vào việc triển khai:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
Và sử dụng nó:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Sử dụng Con trỏ đến cấu trúc của bạn
Đề nghị thứ hai là sử dụng một con trỏ đến struct của bạn: *Session
. Con trỏ có thể có nil
các giá trị, vì vậy bạn có thể kiểm tra nó:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}