ما هي القيمة الصفرية (zero value) لـ time.Time في Go وكيف تتحقق مما إذا كان متغير الوقت فارغًا؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go وواجهت موقفًا غير مفهوم أثناء العمل مع النوع time.Time.
لدي هيكل لتخزين بيانات المستخدم:
type User struct {
ID int
Name string
CreatedAt time.Time
UpdatedAt time.Time
}
عندما أقوم بإنشاء مستخدم جديد دون تحديد الوقت بشكل صريح، أتوقع أن تكون الحقول CreatedAt و UpdatedAt بقيمة null أو nil، كما في اللغات الأخرى (Java, C#). لكن في Go لا يمكنني تعيين nil لهما — المترجم يشتكي.
جربت هكذا:
var u User
fmt.Println(u.CreatedAt) // يطبع: 0001-01-01 00:00:00 +0000 UTC
fmt.Println(u.CreatedAt == nil) // خطأ في الترجمة: cannot convert nil to type time.Time
الأسئلة:
- ما هي القيمة الافتراضية (zero value) لـ
time.Time؟ - لماذا ليست
nil؟ - كيف