English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي Golang

تعليمات التحكم Golang

وظائف & أساليب Golang

مباني Golang

قطع & arrays Golang

Strings Golang

مؤشرات Golang

واجهات Golang

المتعارضات Golang

استثناءات Golang (Error)

متنوعات Golang

تداخل الواجهات بلغة Go

في لغة 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 الخاصة بها.