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

Corso di base di Golang

Istruzioni di controllo di Golang

Funzione & Metodo di Golang

Struttura di Golang

Tagli & Array di Golang

Stringa (String) di Golang

Puntatore di Golang

Interfaccia di Golang

Concordanza di Golang

Eccezioni (Error) di Golang

Altri argomenti di Golang

Interfaccia annidata del linguaggio Go

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.