Ngoài Oleiade, xem thông số kỹ thuật về các giá trị 0 :
Khi bộ nhớ được phân bổ để lưu trữ một giá trị, thông qua khai báo hoặc lệnh gọi thực hiện hoặc mới và không được cung cấp khởi tạo rõ ràng, bộ nhớ được cung cấp một khởi tạo mặc định. Mỗi phần tử của một giá trị như vậy được đặt thành giá trị 0 cho loại của nó: false cho booleans, 0 cho số nguyên, 0,0 cho số float, "" cho chuỗi và nil cho con trỏ, hàm, giao diện, lát, kênh và bản đồ. Việc khởi tạo này được thực hiện một cách đệ quy, vì vậy, ví dụ, mỗi phần tử của một mảng các cấu trúc sẽ có các trường bằng 0 nếu không có giá trị nào được chỉ định.
Như bạn có thể thấy, nil
không phải là giá trị 0 cho mọi loại mà chỉ dành cho con trỏ, hàm, giao diện, lát, kênh và bản đồ. Đây là lý do tại sao config == nil
là một lỗi và
&config == nil
không.
Để kiểm tra xem cấu trúc của bạn chưa được định hình bạn phải kiểm tra tất cả các thành viên cho giá trị bằng không tương ứng của nó (ví dụ host == ""
, port == 0
vv) hoặc có một lĩnh vực tư nhân được thành lập bởi một phương pháp khởi tạo nội bộ. Thí dụ:
type Config struct {
Host string
Port float64
setup bool
}
func NewConfig(host string, port float64) *Config {
return &Config{host, port, true}
}
func (c *Config) Initialized() bool { return c != nil && c.setup }