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