الهياكل في جولانج
تعد الهياكل في Golang واحدة من أكثر الطرق استخدامًا وطريقة لإنشاء أنواع محددة بواسطة المستخدم.
في هذا ، سأغطي جميع الأساسيات حول الهياكل وكيفية استخدامها في برامج go الخاصة بك مع بعض الأمثلة.
هيا بنا نبدأ!
مقدمة
أ هيكل عبارة عن مجموعة من حقول البيانات المتعددة مع أنواع البيانات المحددة الخاصة بهم مجمعة معًا. إنها مفيدة لتجميع البيانات معًا لتشكيل سجلات مخصصة. يتكون الهيكل من كل من الأنواع المضمنة والمعرفة من قبل المستخدم (البنية نفسها هي نوع محدد من قبل المستخدم).
الهياكل في Golang قابلة للتغيير ، أي يمكن تعديلها خلال البرنامج.
تساعد الهياكل في تحسين جودة الشفرة الإجمالية من خلال السماح لنا بإنشاء هياكل بيانات معقدة وتمريرها عبر وحدات نمطية متعددة. تخيل تمرير 10 معلمات إلى دالة ، ستهرب قريبًا من الكود. هذا هو بالضبط سبب فائدة البنى ، الآن بدلاً من 10 معلمات يمكنك ببساطة تمرير بنية واحدة لهذه الوظيفة.
يتم التصريح عن الهيكل باستخدام كلمتين رئيسيتين – يكتب وهيكل. يتم تغليفه بأقواس متعرجة (تمامًا مثل الفئات في جافا) – والتي تحتوي على مجموعة من الحقول التي لها نوع محدد ومعرف (اسم). نناقش تفاصيل التنفيذ في القسم التالي.
إذا أتيت من خلفية برمجة كائنية التوجه (OOP) ، فيمكنك التفكير في البنية كفئة ولكن بدون وراثة.
إعلان الهياكل
الآن ، بعد أن فهمت ماهية البنية ولماذا يتم استخدامها ، فقد حان الوقت لتعلم كيفية التصريح عن البنيات. الهيكل الأساسي للهيكل يشبه –
type name_of_struct struct { field1 data_type_field1 field2 data_type_field2 }
هنا ، النوع والبنية عبارة عن كلمات رئيسية ، بينما تحتوي البنية على عدة حقول بنوع بياناتها المحدد.
دعونا نرى مثالا –
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { var user User fmt.Println(user) }
هنا ، نحدد بنية المستخدم التي تتكون من حقول سلسلة و int و float32. في () نعلن أن هيكلنا مستخدم ونطبعه! الناتج الذي نحصل عليه هو قيمة صفرية / فارغة للبنية لأننا لم نقم بتهيئتها بعد! ال قيمة صفرية هي في الأساس قيم صفرية لكل حقل.
{ 0 0}
تهيئة الهياكل
في القسم السابق ، تعلمنا كيفية التصريح عن البنى. الآن ، نريد تهيئتها أو تعيين قيم لها. تحقق من الكود أدناه لمعرفة كيفية القيام بذلك –
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { // With field names user1 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } // Without field names user2 := User{"Nidhi", 21, 1000.0} fmt.Println(user1) fmt.Println(user2) }
يشرح الكود نفسه كيف نقوم بتهيئة هيكلين مع وبدون أسماء الحقول. هنا ، سيكون الإخراج –
{Mohit 24 100} {Nidhi 21 1000}
في الحالة المذكورة أعلاه ، إذا لم تتم تهيئة أحد الحقول ، فسيتم تعيين هذا الحقل افتراضيًا على قيمته الصفرية.
user1 := User{ name: "Mohit", age: 24, } // Output - { Mohit 24 0.0 }
هناك طريقة أخرى لإنشاء الهياكل باستخدام كلمة رئيسية جديدة. سننظر في كيفية استخدامه في القسم التالي.
الوصول إلى حقول الهيكل
الآن نحن نعرف كيفية إنشاء الهياكل وتهيئتها ، دعنا نرى كيفية الوصول إلى حقول الهيكل. لهذا الغرض ، يوفر لنا Golang عامل التشغيل النقطي. متابعة للمثال السابق ، دعونا نصل إلى حقول الاسم والعمر ونطبعها.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { // With field names user := User{ name: "Mohit", age: 24, bankBalance: 100.0, } fmt.Println(user.name) fmt.Println(user.age) fmt.Println(user.bankBalance) }
هنا ، نستخدم Struct_name.field_name للوصول إلى الحقول في البنية. سيكون إخراج الكود أعلاه –
Mohit 24 100
كما ذكرنا سابقًا ، يمكننا إنشاء هياكل باستخدام كلمة رئيسية جديدة. لنرى كيف –
user := new(User) user.name = "Mohit" user.age = 24 user.bankBalance = 100.0 fmt.Println(user) // Output - &{Mohit 24 100}
الكلمة الأساسية الجديدة ترجع المؤشر إلى البنية التي تمت تهيئتها. في Golang ، لا تحتاج إلى إلغاء إشارة المؤشر بشكل صريح ، لكن fmt.Println (* user) سيؤدي إلى نفس الناتج.
الهياكل المتداخلة
يمكن أن تحتوي الهياكل في golang على أنواع أخرى محددة من قبل المستخدم أيضًا. لذلك ، يمكن أن تحتوي البنية على بنى متداخلة أخرى.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 roleDetails RoleDetails } type RoleDetails struct { position string team string } func main() { roleDetailForMohit := RoleDetails{ position: "Software Engineer", team: "Transport", } user := User{ name: "Mohit", age: 24, bankBalance: 100.0, roleDetails: roleDetailForMohit, } fmt.Println(user) }
في الكود أعلاه ، لدينا RoleDetails Struct كجزء من بنية المستخدم. سيكون الإخراج –
{Mohit 24 100 {Software Engineer Transport}}
إذا كنت ترغب في الوصول إلى roleDetails ، فيمكنك القيام بذلك باستخدام نفس عامل تشغيل النقاط –
user.roleDetails.position
المساواة الهيكلية
تتساوى بنيتان إذا كان كل حقل من الحقول الموجودة بهما متساوي (كلاهما مضمّن ومعرّف من قِبل المستخدم) ولكن ليست كل أنواع البيانات قابلة للمقارنة. (الخريطة غير قابلة للمقارنة مباشرة). دعونا نرى مثالاً لإثبات المساواة.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { user1 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } user2 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } user3 := User{ name: "Nidhi", age: 21, bankBalance: 1000.0, } if user1 == user2 { fmt.Println("user1 and user2 are equal") } else { fmt.Println("user1 and user2 are not equal") } if user1 == user3 { fmt.Println("user1 and user3 are equal") } else { fmt.Println("user1 and user3 are not equal") } }
الهياكل الفارغة والصفرية متساوية. لا يهم ترتيب الحقول ، بشكل أساسي ، يجب أن يتطابق كل حقل من أجل المساواة. سيكون إخراج الكود أعلاه –
user1 and user2 are equal user1 and user3 are not equal
استنتاج
رائع!
أنت الآن جاهز لاستخدام الهياكل في golang. لقد غطينا جميع الأساسيات مثل التصريح والتهيئة والوصول إلى حقول البنية. نظرنا أيضًا في كيفية مقارنة بنيتين وحتى تنفيذ بنية متداخلة. فيما يلي بعض الموارد لمعرفة المزيد حول الهياكل –
هناك الكثير لنتعلمه عن البنيات ، لكنها بداية جيدة في الوقت الحالي. أتمنى أن تكون قد تعلمت شيئًا جديدًا!
استمر في الاستكشاف. استمر في التعلم!