English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In Go, un'interfaccia è un insieme di firme di metodo, è anche un tipo, il che significa che puoi creare variabili di tipo interfaccia. Notoriamente, il linguaggio Go non supporta l'ereditarietà, ma l'interfaccia Go supporta completamente l'annidamento. Durante il processo di annidamento, un'interfaccia può annidare altre interfacce, o un'interfaccia può annidare le firme dei metodi di altre interfacce, i risultati sono gli stessi come mostrato negli esempi 1 e 2. Puoi annidare un numero qualsiasi di interfacce in un'unica interfaccia. Inoltre, se vengono apportate qualsiasi modifica ai metodi dell'interfaccia, l'interfaccia che annida altre interfacce rifletterà anche nell'interfaccia annidata, come mostrato nell'esempio 3.
Sintassi:
type interface_name1 interface { Method1() } type interface_name2 interface { Method2() } type finalinterface_name interface { interface_name1 interface_name2 } o type interface_name1 interface { Method1() } type interface_name2 interface { Method2() } type finalinterface_name interface { Method1() Method2() }
Esempio di annidamento dell'interfaccia 1:
package main import "fmt" // Interfaccia 1 type AuthorDetails interface { details() } // Interfaccia 2 type AuthorArticles interface { articles() } // Interfaccia 3 //Interfaccia 3 annidata Interfaccia 1 e Interfaccia 2 type FinalDetails interface { AuthorDetails AuthorArticles } // Struttura type author struct { a_name string branch string college string year int salary int particles int tarticles int } // Implementazione del metodo dell'interfaccia 1 func (a author) details() { fmt.Printf("Autore: %s", a.a_name) fmt.Printf("\nDipartimento: %s Data di approvazione: %d", a.branch, a.year) fmt.Printf("\nNome dell'università: %s", a.college) fmt.Printf("\nStipendio: %d", a.salary) fmt.Printf("\nNumero di articoli pubblicati: %d", a.particles) } // Implementazione del metodo dell'interfaccia 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNumero degli articoli in sospeso: %d", pendingarticles) } func main() { // Assegnamento della struttura values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, } // Accesso ai metodi dell'interfaccia 1, 2 tramite l'interfaccia FinalDetails var f FinalDetails = values f.details() f.articles() }
Output:
Autore: Mickey Dipartimento: Computer science Data: 2012 Nome dell'università: XYZ Stipendio: 50000 Numero degli articoli pubblicati: 209 Numero degli articoli in sospeso: 100
Istruzioni per l'uso:Come mostrato nell'esempio, abbiamo tre interfacce. Le interfacce 1 e 2 sono interfacce semplici, l'interfaccia 3 è un'interfaccia annidata che contiene sia l'interfaccia 1 che l'interfaccia 2. Pertanto, se le interfacce 1 e 2 subiscono qualsiasi modifica, l'interfaccia 3 rifletterà queste modifiche. L'interfaccia 3 può accedere a tutti i metodi esistenti nelle interfacce 1 e 2.
Nested interface methods:
package main import "fmt" // Interfaccia 1 type AuthorDetails interface { details() } // Interfaccia 2 type AuthorArticles interface { articles() } // Interfaccia 3 // L'interfaccia 3 annida l'interfaccia 1 e i metodi type FinalDetails interface { details() articles() } // Struttura type author struct { a_name string branch string college string year int salary int particles int tarticles int } // Implementazione del metodo dell'interfaccia 1 func (a author) details() { fmt.Printf("Autore: %s", a.a_name) fmt.Printf("\nDipartimento: %s Data di approvazione: %d", a.branch, a.year) fmt.Printf("\nNome dell'università: %s", a.college) fmt.Printf("\nStipendio: %d", a.salary) fmt.Printf("\nNumero di articoli pubblicati: %d", a.particles) } // Implementazione del metodo dell'interfaccia 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNumero degli articoli in sospeso: %d", pendingarticles) } func main() { // Assegnamento della struttura values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, }
Output:
Autore: Mickey Dipartimento: Computer science Data: 2012 Nome dell'università: XYZ Stipendio: 50000 Numero degli articoli pubblicati: 209 Numero degli articoli in sospeso: 100
Istruzioni per l'uso:Come mostrato nell'esempio, abbiamo tre interfacce. Le interfacce 1 e 2 sono interfacce semplici, l'interfaccia 3 è un'interfaccia annidata che contiene i firmamenti delle interfacce 1 e 2. Pertanto, se i metodi delle interfacce 1 e 2 subiscono qualsiasi modifica, essa si rifletterà nell'interfaccia 3. L'interfaccia 3 può accedere a tutti i metodi esistenti nelle interfacce 1 e 2.
Esempio di interfaccia annidata e con metodi propri: interfaccia 3
package main import "fmt" // Interfaccia 1 type AuthorDetails interface { details() } // Interfaccia 2 type AuthorArticles interface { articles() picked() } // Interfaccia 3 // Interfaccia 3 annida l'interfaccia 1 e 2, aggiungendo i propri metodi type FinalDetails interface { details() AuthorArticles cdeatils() } // Struttura della variabile 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 } // Implementazione del metodo dell'interfaccia 1 func (a author) details() { fmt.Printf("Autore: %s", a.a_name) fmt.Printf("\nDipartimento: %s Data di approvazione: %d", a.branch, a.year) fmt.Printf("\nNome dell'università: %s", a.college) fmt.Printf("\nStipendio: %d", a.salary) fmt.Printf("\nNumero di articoli pubblicati: %d", a.particles) } // Implementazione del metodo dell'interfaccia 2 func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNumero degli articoli in sospeso: %d", pendingarticles) } func (a author) picked() { fmt.Printf("\nNumero totale degli articoli selezionati: %d", a.pick) } // Implementazione del metodo incorporato nell'interfaccia func (a author) cdeatils() { fmt.Printf("\nId autore: %d", a.cid) fmt.Printf("\nInvio: %s", a.post) } func main() { // Assegnamento della struttura 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, } // Utilizzare l'interfaccia FinalDetails per accedere ai metodi dell'interfaccia 1, 2 var f FinalDetails = values f.details() f.articles() f.picked() f.cdeatils() }
Output:
Autore: Mickey Dipartimento: Computer science Data: 2012 Nome dell'università: XYZ Stipendio: 50000 Numero degli articoli pubblicati: 209 Numero degli articoli in sospeso: 100 Numero totale degli articoli selezionati: 58 Id autore: 3087 Autore: Technical content writer
Istruzioni per l'uso:Come esempio sopra, abbiamo tre interfacce. L'interfaccia 1 e 2 sono interfacce semplici, mentre l'interfaccia 3 è un'interfaccia a livello di contenitore, che contiene la firma del metodo dell'interfaccia 1 e i metodi dell'interfaccia 2 e del suo stesso metodo. Pertanto, se si verificano modifiche ai metodi dell'interfaccia 1 e dell'interfaccia 2, queste si rifletteranno nell'interfaccia 3. L'interfaccia 3 può accedere a tutti i metodi dell'interfaccia 1, inclusi i metodi dell'interfaccia 1, 2 e del suo stesso metodo.