عندما تقوم بإدراج بيانات في قاعدة البيانات MySQL باستخدام Golang، وترغب في إدراج قيمة NULL بدلاً من السلسلة الفارغة في حالة استنفاد القيمة، يمكنك استخدام قيمة الصفر للنوع المؤشر على النص الفارغ (string pointer) بدلاً من النص الفارغ ذاته. هذا الأمر يعني أنك تمرر nil
بدلاً من السلسلة الفارغة.
في الكود الذي قدمته، يبدو أنك تستخدم المتغير ve.EventInfo
كقيمة لعمود info
في قاعدة البيانات. لتحقيق ما تريد، يمكنك التحقق من قيمة ve.EventInfo
، وإذا كانت فارغة، قم بتمرير nil
بدلاً من السلسلة الفارغة. هذا سيؤدي إلى إدراج قيمة NULL في قاعدة البيانات.
إليك كيف يمكن تعديل الكود لتحقيق هذا:
govar info *string
if ve.EventInfo == "" {
info = nil
} else {
info = &ve.EventInfo
}
_, err := m.Db.Exec(`INSERT INTO
visitor_events
(type,
info,
url_path,
visitor_id,
created_at,
domain)
VALUES
(?, ?, ?, ?, ?, ?)`,
m.SaveEventType(ve), info, m.SaveURLPath(ve.UrlPath), ve.VisitorId, time.Now().UTC(), ve.Domain)
بهذا التعديل، سيتم تمرير nil
إلى العمود info
في حالة كانت القيمة فارغة، مما ينتج عنه إدراج قيمة NULL في قاعدة البيانات بدلاً من السلسلة الفارغة.
المزيد من المعلومات
بالطبع، دعني أواصل المقال لشرح الطريقة التي يمكن بها تعديل الكود ليتمكن من إدراج قيم NULL بشكل أكثر عمومية، بحيث يمكن تطبيقها على جميع الحالات التي تتطلب إدراج NULL بدلاً من القيم الفارغة.
يمكننا تحسين الكود بواسطة استخدام وظيفة مساعدة للتحقق من القيم الفارغة وتحويلها إلى مؤشرات نص، وذلك لجعل الكود أكثر وضوحًا وإعادة استخدامًا. هذه الوظيفة ستأخذ قيمة النص كمعامل وستقوم بإرجاع مؤشر إلى النص إذا كان النص غير فارغ، وستقوم بإرجاع nil إذا كان النص فارغًا.
فيما يلي تحديث للكود يستخدم هذه الوظيفة:
gofunc stringToPointer(s string) *string {
if s == "" {
return nil
}
return &s
}
// في مكان الكود السابق
info := stringToPointer(ve.EventInfo)
_, err := m.Db.Exec(`INSERT INTO
visitor_events
(type,
info,
url_path,
visitor_id,
created_at,
domain)
VALUES
(?, ?, ?, ?, ?, ?)`,
m.SaveEventType(ve), info, m.SaveURLPath(ve.UrlPath), ve.VisitorId, time.Now().UTC(), ve.Domain)
باستخدام هذا التحديث، يمكننا استخدام الوظيفة stringToPointer
في أي مكان نرغب في تحويل السلاسل الفارغة إلى قيم NULL. هذا يجعل الكود أكثر قابلية للصيانة ويسهل فهمه لأي مطور يعمل على المشروع.
وبهذا، يتم تحقيق الهدف من تحويل القيم الفارغة إلى NULL بشكل عام ومنهجي في تطبيقك الخاص. هذا التعديل يجعل الكود أكثر مرونة ويسهل الصيانة، ويمكن أن يكون مفيدًا في حالة الرغبة في تطبيق هذا التحويل في العديد من الأماكن داخل التطبيق.