المؤشرات إلى الـ Structs
جزء من قسم Fundamentals في رحلة GO على Coddy — الدرس 97 من 109.
عند العمل مع الـ structs، يمكنك إنشاء مؤشرات (pointers) لها تماماً كما هو الحال مع الأنواع الأخرى. هذا مفيد لتمرير الـ structs الكبيرة بكفاءة.
قم بتعريف هيكل (struct) من النوع Person وأنشئ مؤشرًا (pointer) إليه:
type Person struct {
name string
age int
}
func main() {
person := Person{name: "Alice", age: 30}
// إنشاء مؤشر للهيكل
personPtr := &person
// الوصول إلى الحقول من خلال المؤشر
fmt.Println(personPtr.name)
fmt.Println(personPtr.age)
}يوضح المخرج أنه يمكننا الوصول إلى الحقول من خلال المؤشر:
Alice
30يمكنك أيضاً تعديل الحقول من خلال المؤشر:
personPtr.age = 31
fmt.Println(person.age) // يطبع: 31التحدي
مبتدئفي هذا التحدي، ستتدرب على التعامل مع المؤشرات (pointers) إلى الهياكل (structs) في لغة Go. لديك هيكل Person يحتوي على حقول name و age. مهمتك هي تحديث معلومات الشخص باستخدام مؤشر للهيكل.
يقوم الكود بالفعل بإنشاء هيكل Person ومؤشر له. تحتاج إلى تعديل معلومات الشخص من خلال المؤشر.
ورقة مرجعية
أنشئ مؤشرات (pointers) للهياكل (structs) باستخدام عامل التشغيل &:
type Person struct {
name string
age int
}
person := Person{name: "Alice", age: 30}
personPtr := &personالوصول إلى حقول الهيكل وتعديلها من خلال المؤشرات:
// الوصول إلى الحقول
fmt.Println(personPtr.name)
fmt.Println(personPtr.age)
// تعديل الحقول
personPtr.age = 31جرّب بنفسك
package main
import "fmt"
// هيكل Person مع حقول الاسم والعمر
type Person struct {
name string
age int
}
func main() {
// إنشاء هيكل Person
person := Person{
name: "John",
age: 25,
}
// إنشاء مؤشر (pointer) لهيكل Person
personPtr := &person
// طباعة معلومات الشخص الأصلية
fmt.Println("Original person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
// TODO: استخدم المؤشر لتغيير اسم الشخص إلى "Jane" والعمر إلى 30
// تلميح: يمكنك الوصول إلى حقول الهيكل من خلال المؤشر باستخدام تدوين النقطة (dot notation)
// طباعة معلومات الشخص المحدثة
fmt.Println("Updated person:")
fmt.Printf("Name: %s, Age: %d\n", person.name, person.age)
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4معاملات المقارنة والمعاملات المنطقية
معاملات المقارنة - الجزء 1معاملات المقارنة - الجزء 2معامل AND المنطقيمعامل OR المنطقيمعامل NOT المنطقيأساسيات أولوية المعاملاتملخص - إجراء المقارنات7تدفق التحكم: الحلقات التكرارية
شرح حلقة `for`حلقة `for` - أساسياتحلقة `for` - بشرط فقطالكلمة المفتاحية `break`الكلمة المفتاحية `continue`الحلقات المتداخلةملخص - تكرار العمليات10الأنواع المركبة: المصفوفات
مقدمة إلى المصفوفاتالتصريح عن المصفوفاتتهيئة المصفوفاتالوصول إلى عناصر المصفوفةطول المصفوفة باستخدام `len`التكرار عبر المصفوفاتالمصفوفات متعددة الأبعاد13الأنواع المركبة: Structs
تعريف أنواع مخصصةإنشاء نماذج من الـ Structsالوصول إلى حقول الـ Structالمؤشرات إلى الـ Structsتهيئة الـ Structsالـ Structs المضمنةالـ Structs المجهولةمراجعة - هياكل البيانات المخصصة2المتغيرات وأنواع البيانات الأساسية
ما هو المتغير؟استنتاج النوع باستخدام `:=`الأعداد الصحيحة (int)أرقام الفاصلة العائمةالقيم المنطقية (Booleans)النصوص (Strings)القيم الصفريةالثوابتقواعد التسميةملخص - المتغيرات والأنواع5الإدخال والإخراج الأساسي
المخرجات المنسقةرموز التنسيقطباعة الأنواعالحصول على مدخلات المستخدم الأساسيةملخص - الإدخال والإخراج8الدوال
فهم الدوالالتصريح عن دالةاستدعاء الدوالمعاملات الدالةإرجاع قيمة واحدةإرجاع قيم متعددةقيم الإرجاع المسماةأساسيات نطاق الدالةملخص - إنشاء كود قابل لإعادة الاستخدام3المعاملات الأساسية
المعاملات الحسابيةمعامل القسمةمعامل باقي القسمةمعامل التعيينمعاملات التعيين المركبةالزيادة والنقصانملخص - الحسابات6تدفق التحكم: الجمل الشرطية
جملة `if`الكلمة المفتاحية `else`الكلمة المفتاحية `else if`تظليل المتغيرات في `if`تهيئة المتغيراتجملة `switch``switch` مع التعبيرات`switch` بدون تعبيرالكلمة المفتاحية `fallthrough`ملخص - اتخاذ القرارات