English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في لغة Go، الواجهة هي مجموعة من إشارات الأساليب، وهي أيضًا نوع، مما يعني أنه يمكنك إنشاء متغيرات نوع واجهة. من المعروف أن لغة Go لا تدعم النسب، ولكن تدعم واجهات النسب بشكل كامل. أثناء عملية النسب، يمكن لواجهة أن تنسب واجهات أخرى، أو يمكن لواجهة أن تنسب إشارات الأساليب لأخرى، والنتيجة تكون مثل المثال 1 و2 المذكورين. يمكنك تنسيب أي عدد من الواجهات في واجهة واحدة. بالإضافة إلى ذلك، إذا تم تعديل أي أسلوب في واجهة، فإن هذه الواجهة ستعكس أيضًا في واجهة النسب عند تنسيبها في واجهة أخرى، كما هو موضح في المثال 3.
النحو:
نوع واجهة_name1 واجهة { Method1() } نوع واجهة_name2 واجهة { Method2() } نوع واجهة_namefinal واجهة { interface_name1 interface_name2 } أو نوع واجهة_name1 واجهة { Method1() } نوع واجهة_name2 واجهة { Method2() } نوع واجهة_namefinal واجهة { Method1() Method2() }
مثال النوع 1: واجهة داخل واجهة
package main import "fmt" //واجهة 1 type AuthorDetails interface { details() } //واجهة 2 type AuthorArticles interface { articles() } //واجهة 3 //接口3嵌套接口1和接口2 type FinalDetails interface { AuthorDetails AuthorArticles } //هيكلية type author struct { a_name string branch string college string year int salary int particles int tarticles int } // تنفيذ طريقة واجهة 1 func (a author) details() { fmt.Printf("المؤلف: %s", a.a_name) fmt.Printf("\nالقسم: %s تاريخ المرور: %d", a.branch, a.year) fmt.Printf("\nاسم الجامعة: %s", a.college) fmt.Printf("\nالراتب: %d", a.salary) fmt.Printf("\nعدد المقالات المنشورة: %d", a.particles) } // تنفيذ طريقة واجهة 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nعدد المقالات المعقدة: %d", pendingarticles) } func main() { //تنفيذ تعيين هيكلية values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, } //استخدام واجهة FinalDetails للوصول إلى طرق واجهة 1 و2 var f FinalDetails = values f.details() f.articles() }
النتيجة:
الكاتب: Mickey القسم: Computer science تاريخ الإصدار: 2012 اسم الجامعة: XYZ الراتب: 50000 عدد المقالات المنشورة: 209 عدد المقالات المعقدة: 100
تعليمات الاستخدام:كما هو موضح في المثال السابق، لدينا ثلاث واجهات. واجهة 1 وواجهة 2 هي واجهات بسيطة، وواجهة 3 هي واجهة متداخلة تحتوي على واجهات 1 و2. لذلك، إذا تم تعديل واجهة 1 وواجهة 2، فإن واجهة 3 ستتأثر. يمكن لواجهة 3 الوصول إلى جميع الطرق الموجودة في واجهة 1 وواجهة 2.
نصب واجهة الطريقة:
package main import "fmt" //واجهة 1 type AuthorDetails interface { details() } //واجهة 2 type AuthorArticles interface { articles() } //واجهة 3 //واجهة 3 تعمل داخل واجهة 1 وواجهة 2 type FinalDetails interface { details() articles() } //هيكلية type author struct { a_name string branch string college string year int salary int particles int tarticles int } // تنفيذ طريقة واجهة 1 func (a author) details() { fmt.Printf("المؤلف: %s", a.a_name) fmt.Printf("\nالقسم: %s تاريخ المرور: %d", a.branch, a.year) fmt.Printf("\nاسم الجامعة: %s", a.college) fmt.Printf("\nالراتب: %d", a.salary) fmt.Printf("\nعدد المقالات المنشورة: %d", a.particles) } // تنفيذ طريقة واجهة 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nعدد المقالات المعقدة: %d", pendingarticles) } func main() { //تنفيذ تعيين هيكلية values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, }
النتيجة:
الكاتب: Mickey القسم: Computer science تاريخ الإصدار: 2012 اسم الجامعة: XYZ الراتب: 50000 عدد المقالات المنشورة: 209 عدد المقالات المعقدة: 100
تعليمات الاستخدام:كما هو موضح في المثال السابق، لدينا ثلاث واجهات. واجهة 1 وواجهة 2 هي واجهات بسيطة، وواجهة 3 هي واجهة متداخلة تحتوي على طريقة توقيع واجهات 1 و2. لذلك، إذا تم تعديل طريقة واجهة 1 وواجهة 2، فإن ذلك سيظهر في واجهة 3. يمكن لواجهة 3 الوصول إلى جميع الطرق الموجودة في واجهة 1 وواجهة 2.
مثال واجهة 3 التي تحتوي على واجهات داخلية وتحتوي على طريقة خاصة بها:
package main import "fmt" //واجهة 1 type AuthorDetails interface { details() } //واجهة 2 type AuthorArticles interface { articles() picked() } //واجهة 3 //واجهة 3 تعمل داخل واجهة 1 وواجهة 2، وتضيف طريقة خاصة بها type FinalDetails interface { details() AuthorArticles cdeatils() } // مفهوم author type author struct { a_name string branch string college string year int salary int particles int tarticles int cid int post string pick int } // تنفيذ طريقة واجهة 1 func (a author) details() { fmt.Printf("المؤلف: %s", a.a_name) fmt.Printf("\nالقسم: %s تاريخ المرور: %d", a.branch, a.year) fmt.Printf("\nاسم الجامعة: %s", a.college) fmt.Printf("\nالراتب: %d", a.salary) fmt.Printf("\nعدد المقالات المنشورة: %d", a.particles) } // تنفيذ طريقة واجهة 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nعدد المقالات المعقدة: %d", pendingarticles) } func (a author) picked() { fmt.Printf("\nعدد المقالات المختارة: %d", a.pick) } // تنفيذ طريقة مدمجة func (a author) cdeatils() { fmt.Printf("\nمعرف الكاتب: %d", a.cid) fmt.Printf("\nإرسال: %s", a.post) } func main() { // تعيين هيكلية values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, cid: 3087, post: "Technical content writer", pick: 58, } // استخدم FinalDetails واجهة للوصول إلى طرق واجهة 1 و 2 var f FinalDetails = values f.details() f.articles() f.picked() f.cdeatils() }
النتيجة:
الكاتب: Mickey القسم: Computer science تاريخ الإصدار: 2012 اسم الجامعة: XYZ الراتب: 50000 عدد المقالات المنشورة: 209 عدد المقالات المعقدة: 100 عدد المقالات المختارة: 58 معرف الكاتب: 3087 مكتبة المحتوى التقني: Technical content writer
تعليمات الاستخدام:كما هو موضح في المثال السابق، لدينا ثلاثة واجهات. واجهة 1 و 2 واجهات بسيطة، بينما واجهة 3 واجهة مدمجة تحتوي على إشارات اسمية لطريقة واجهة 1، وواجهة 2 الخاصة بها. لذلك، إذا تم تعديل أي طريقة في واجهة 1 وواجهة 2، فإن ذلك سيظهر في واجهة 3. يمكن لواجهة 3 الوصول إلى جميع الطرق في واجهة 1، بما في ذلك طرق واجهة 1 و 2 الخاصة بها.