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

Tutoriales básicos de Golang

Sentencias de Control de Golang

Funciones & Métodos de Golang

Estructuras de Golang

Cortes & Arreglos de Golang

Cadenas (String) de Golang

Punteros de Golang

Interfaz de Golang

Concurrencia de Golang

Excepciones (Error) de Golang

Otras cosas de Golang

Nivelación de interfaces del lenguaje Go

En el lenguaje Go, una interfaz es una colección de firmas de métodos, también es un tipo, lo que significa que puede crear variables de tipo interfaz. Es bien conocido que el lenguaje Go no admite la herencia, pero las interfaces de Go completamente soportan la nesting. En el proceso de nesting, una interfaz puede nesting otras interfaces, o una interfaz puede nesting firmas de métodos de otras interfaces, los resultados de ambos son equivalentes a los ejemplos1y2中所示的相同。您可以在单个接口中嵌套任意数量的接口。而且,如果对接口的方法进行了任何更改,则在将一个接口嵌套其他接口时,该接口也将反映在嵌套式接口中,如示例3se muestra. Y también, puede anidar una cantidad arbitraria de interfaces en una sola interfaz. Además, si se realizan cambios en los métodos de la interfaz, estos cambios se reflejarán en la interfaz anidada cuando se anida una interfaz en otra, como se muestra en el ejemplo.

sintaxis:

type interface_name1 interface {
    Método1}
}
type interface_name2 interface {
    Método2}
}
type finalinterface_name interface {
    interface_name1
    interface_name2
}
o
type interface_name1 interface {
    Método1}
}
type interface_name2 interface {
    Método2}
}
type finalinterface_name interface {
    Método1}
    Método2}
}

ejemplo de anidación de interfaz1:

package main
import "fmt"
// Interfaz 1
type AuthorDetails interface {
    details()
}
// Interfaz 2
type AuthorArticles interface {
    articles()
}
// Interfaz 3
//Interfaz3interfaz anidada1y la interfaz2
type FinalDetails interface {
    AuthorDetails
    AuthorArticles
}
// la estructura
type author struct {
    a_name string
    branch string
    college string
    year int
    salary int
    particles int
    tarticles int
}
// implementación de la interfaz1métodos
func (a author) details() {
    fmt.Printf("Autor: %s", a.a_name)
    fmt.Printf("\nDepartamento: %s Fecha de aprobación: %d", a.branch, a.year)
    fmt.Printf("\nNombre de la universidad: %s", a.college)
    fmt.Printf("\nSalario: %d", a.salary)
    fmt.Printf("\nNúmero de artículos publicados: %d", a.particles)
}
// implementación de la interfaz2métodos
func (a author) articles() {
    pendingarticles := a.tarticles - a.particles
    fmt.Printf("\nNúmero de artículos pendientes: %d", pendingarticles)
}
func main() {
    // asignación de estructura
    values := author{
        a_name: "Mickey",
        branch: "Informática",
        college: "XYZ",
        year:      2012,
        salary:    50000,
        particles: 209,
        tarticles: 309,
    }
    // se accede a la interfaz FinalDetails1,2métodos
    var f FinalDetails = values
    f.details()
    f.articles()
}

Salida:

Autor: Mickey
Departamento: Informática. Fecha a través de: 2012
Nombre de la universidad: XYZ
Salario: 50000
Número de artículos publicados: 209
Número de artículos pendientes: 100

Descripción de uso:como se muestra en el ejemplo anterior, tenemos tres interfaces. La interfaz1y2es una interfaz simple, la interfaz3es una interfaz anidada que contiene1y2interfaz. Por lo tanto, si la interfaz1y la interfaz2cualquier cambio, la interfaz3reflejarán cualquier cambio. La interfaz3pueden acceder a las interfaces1y2que contienen todos los métodos.

anidación de métodos de interfaz:

package main
import "fmt"
// Interfaz 1
type AuthorDetails interface {
    details()
}
// Interfaz 2
type AuthorArticles interface {
    articles()
}
// Interfaz 3
//Interfaz3 que incluye la interfaz1y los métodos de la interfaz
type FinalDetails interface {
    details()
    articles()
}
// la estructura
type author struct {
    a_name string
    branch string
    college string
    year int
    salary int
    particles int
    tarticles int
}
// implementación de la interfaz1métodos
func (a author) details() {
    fmt.Printf("Autor: %s", a.a_name)
    fmt.Printf("\nDepartamento: %s Fecha de aprobación: %d", a.branch, a.year)
    fmt.Printf("\nNombre de la universidad: %s", a.college)
    fmt.Printf("\nSalario: %d", a.salary)
    fmt.Printf("\nNúmero de artículos publicados: %d", a.particles)
}
// implementación de la interfaz2métodos
func (a author) articles() {
    pendingarticles := a.tarticles - a.particles
    fmt.Printf("\nNúmero de artículos pendientes: %d", pendingarticles)
}
func main() {
    // asignación de estructura
    values := author{
        a_name: "Mickey",
        branch: "Informática",
        college: "XYZ",
        year:      2012,
        salary:    50000,
        particles: 209,
        tarticles: 309,
    }

Salida:

Autor: Mickey
Departamento: Informática. Fecha a través de: 2012
Nombre de la universidad: XYZ
Salario: 50000
Número de artículos publicados: 209
Número de artículos pendientes: 100

Descripción de uso:como se muestra en el ejemplo anterior, tenemos tres interfaces. La interfaz1y2es una interfaz simple, la interfaz3es una interfaz anidada que contiene1y2la firma del método de la interfaz. Por lo tanto, si la interfaz1y la interfaz2cualquier cambio en los métodos, se reflejará en la interfaz3de entre ellas. La interfaz3pueden acceder a las interfaces1y2que contienen todos los métodos.

Ejemplo de interfaz anidada y con métodos propios3:

package main
import "fmt"
// Interfaz 1
type AuthorDetails interface {
    details()
}
// Interfaz 2
type AuthorArticles interface {
    articles()
    picked()
}
// Interfaz 3
//Interfaz3anidado en la interfaz1y la interfaz2,además de sus propios métodos
type FinalDetails interface {
    details()
    AuthorArticles
    cdeatils()
}
// Estructura 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
}
// implementación de la interfaz1métodos
func (a author) details() {
    fmt.Printf("Autor: %s", a.a_name)
    fmt.Printf("\nDepartamento: %s Fecha de aprobación: %d", a.branch, a.year)
    fmt.Printf("\nNombre de la universidad: %s", a.college)
    fmt.Printf("\nSalario: %d", a.salary)
    fmt.Printf("\nNúmero de artículos publicados: %d", a.particles)
}
// implementación de la interfaz2métodos
func (a author) articles() {
    pendingarticles := a.tarticles - a.particles
    fmt.Printf("\nNúmero de artículos pendientes: %d", pendingarticles)
}
func (a author) picked() {
    fmt.Printf("\nNúmero total de artículos seleccionados: %d", a.pick)
}
// métodos implementados que se insertan en la interfaz
func (a author) cdeatils() {
    fmt.Printf("\nId del autor: %d", a.cid)
    fmt.Printf("\nPresentación: %s", a.post)
}
func main() {
    //asignación de estructura
    values := author{
        a_name: "Mickey",
        branch: "Informática",
        college: "XYZ",
        year:      2012,
        salary:    50000,
        particles: 209,
        tarticles: 309,
        cid:       3087,
        post: "Technical content writer",
        pick:      58,
    }
    // para acceder a la interfaz1,2métodos
    var f FinalDetails = values
    f.details()
    f.articles()
    f.picked()
    f.cdeatils()
}

Salida:

Autor: Mickey
Departamento: Informática. Fecha a través de: 2012
Nombre de la universidad: XYZ
Salario: 50000
Número de artículos publicados: 209
Número de artículos pendientes: 100
Número total de artículos seleccionados: 58
Id del autor: 3087
Technical content writer

Descripción de uso:como se muestra en el ejemplo anterior, tenemos tres interfaces. La interfaz1y2es una interfaz simple, mientras que la interfaz3es una interfaz anidada que contiene otras interfaces1la firma de los métodos, la interfaz2y sus propios métodos. Por lo tanto, si la interfaz1los métodos y las interfaces2si se produce cualquier cambio, se reflejará en la interfaz3de entre ellas. La interfaz3pueden acceder a las interfaces1Todos los métodos, incluyendo las interfaces1、2y sus propios métodos.