English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هيكل (struct) في Go هو نوع مخصص يسمح بجمع/دمج العناصر المختلفة في نوع واحد. يمكن تمثيل أي كيان في العالم الحقيقي يمتلك مجموعة من الخصائص/الحقول كهيكل. هذه الفكرة عادة ما تُقارن بالفئات في البرمجة الموجهة للكائنات. يمكن تسميتها كفئة خفيفة لا تدعم الوراثة ولكن تدعم التجميع.
على سبيل المثال، عنوانًا يحتوي على name, street, city, state, Pincode. كما هو موضح أدناه، يتم دمج هذه الثلاثة خصائص في هيكلAddressهي معنوية.
تعريف الهيكل:
type Address struct { name string street string city string state string Pincode int }
في هذا المثال،typeالكلمة المفتاحية تقدم نوعًا جديدًا. يتبعها اسم النوع (Address()) والكلمة المفتاحيةstruct،لإيضاح أننا نتعريف هيكل. يحتوي الهيكل على قائمة الحقول الموجودة داخل الأقواس. يحتوي كل حقل على اسم ونوع.
注意:يمكننا أيضًا تجميع الحقول المختلفة من نفس النوع لجعلها أكثر تكدسًا، كما هو موضح في المثال التالي:
type Address struct { name, street, city, state string Pincode int }
تعريف الهيكل:تقنية تعريف الهيكل:
var a Address
يؤدي الكود أعلاه إلى إنشاءنوع Addressالمتغير، حيث يتم تعيينها إلى الصفر افتراضيًا. بالنسبة للهياكل، الصفر يعني أن جميع الحقول يتم تعيينها إلى قيم الصفر المترادفة. لذلك، يتم تعيين الحقول name, street, city, state إلى ""، بينما يتم تعيين Pincode إلى 0.
يمكنك أيضًااستخدام كيانات النصوص للتعريف المتغيرات النوعية للهياكل،如下所示:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
注意:
始终以在结构中声明它们的顺序传递字段值。同样,您不能仅使用上述语法初始化字段的子集。
Go还支持名称:value语法,用于初始化结构(使用此语法时字段的顺序无关紧要)。而且,这仅允许您初始化字段的子集。所有未初始化的字段均设置为其相应的零值。
例如:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main import "fmt" // 定义结构类型 type Address struct { Name string city string Pincode int } func main() { // 声明一个“struct”类型的变量 // 初始化所有struct字段 // 其值为零 var a Address fmt.Println(a) // 声明和初始化 // struct使用结构文字 a1 := Address{"Akshay", "Dehradun", 3623572} fmt.Println("Address1: ", a1) // 在命名字段时 // 初始化一个结构 a2 := Address{Name: "Anikaa", city: "Ballia", Pincode: 277001} fmt.Println("Address2: ", a2) // 未初始化的字段设置为 // 它们对应的零值 a3 := Address{Name: "Delhi"} fmt.Println("Address3: ", a3) }
الناتج:
{ 0} Address1: {Akshay Dehradun 3623572} Address2: {Anikaa Ballia 277001} Address3: {Delhi 0}
要访问结构的各个字段,您必须使用点(.)运算符。
package main import "fmt" // 定义结构体 type Car struct { Name, Model, Color string WeightInKg float64 } func main() { c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} //استخدام ميدان هيكل //استخدام نقطة الترجيح fmt.Println("اسم السيارة: ", c.Name) fmt.Println("لون السيارة: ", c.Color) //تعيين قيمة جديدة //إشارة إلى ميدان هيكل c.Color = "Black" //عرض النتيجة fmt.Println("سيارة: ", c) }
الناتج:
اسم السيارة: {Ferrari} لون السيارة: {أحمر} سيارة: {Ferrari GTC4 Black 1920}
المراجع في Golang هي متغير تستخدم لتخزين عنوان متغير آخر. يمكنك أيضًا إنشاء مرجع إلى هيكل، مثل المثال التالي:
//إشارة إلى هيكل الهيكل package main import "fmt" //تحديد هيكل type Employee struct { اسم الأول, اسم العائلة string العمر, الراتب int } func main() { //تم إرسال عنوان هيكل المتغير //emp8 هو إشارة إلى هيكل Employee emp8 := &Employee{"Sam", "Anderson", 55, 6000} //( *emp8).firstName هو النحو المستخدم للوصول //ميدان firstName للهيكل emp8 fmt.Println("اسم الأول:", (*emp8).firstName) fmt.Println("العمر:", (*emp8).age) }
الناتج:
اسم الأول: Sam العمر: 55
يقدم لنا Golang خيارًا لاستخدام emp8.firstName بدلاً من تفريغ صريح (*emp8).firstName للوصول إلى ميدان firstName. يظهر هذا المثال كما يلي:
//إشارة إلى الهيكل package main import "fmt" //تحديد هيكل type Employee struct { اسم الأول, اسم العائلة string العمر, الراتب int } func main() { //الحصول على إشارة إلى الهيكل emp8 := &Employee{"Sam", "Anderson", 55, 6000} // emp8.firstName يستخدم للوصول //ميدان firstName fmt.Println("اسم الأول: ", emp8.firstName) fmt.Println("العمر: ", emp8.age) }
الناتج:
اسم الأول: العمر: 55