English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
No Go language, interfaces are a collection of method signatures, and it is also a type, which means you can create variables of interface type. As everyone knows, Go language does not support inheritance, but Go interfaces fully support nesting. In the nesting process, an interface can nest other interfaces, or an interface can nest the method signatures of other interfaces, and the results of both are the same as the example1e2中所示的相同。您可以在单个接口中嵌套任意数量的接口。而且,如果对接口的方法进行了任何更改,则在将一个接口嵌套其他接口时,该接口也将反映在嵌套式接口中,如示例3mostrado. Você pode aninhar uma quantidade arbitrária de interfaces em uma única interface. E se houver qualquer alteração nos métodos da interface, essa alteração também será refletida na interface aninhada ao aninhar uma interface em outra interface, conforme o exemplo.
sintaxe:
type interface_name1 interface { Método1() } type interface_name2 interface { Método2() } type finalinterface_name interface { interface_name1 interface_name2 } ou type interface_name1 interface { Método1() } type interface_name2 interface { Método2() } type finalinterface_name interface { Método1() Método2() }
exemplo de interface aninhada1:
package main import "fmt" // Interface 1 type AuthorDetails interface { details() } // Interface 2 type AuthorArticles interface { articles() } // Interface 3 //Interface3interface aninhada1e interfaces2 type FinalDetails interface { AuthorDetails AuthorArticles } // estrutura type author struct { a_name string branch string college string year int salary int particles int tarticles int } // Implementação da interface1métodos func (a author) details() { fmt.Printf("Autor: %s", a.a_name) fmt.Printf("\nDepartamento: %s Data de Aprovação: %d", a.branch, a.year) fmt.Printf("\nNome da Universidade: %s", a.college) fmt.Printf("\nSalário: %d", a.salary) fmt.Printf("\nNúmero de artigos publicados: %d", a.particles) } // Implementação da interface2métodos func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNúmero de artigos pendentes: %d", pendingarticles) } func main() { // Atribuição de estruturas values := author{ a_name: "Mickey", branch: "Ciência da Computação", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, } // para acessar a interface1,2métodos var f FinalDetails = values f.details() f.articles() }
Saída:
Autor: Mickey Departamento: Ciência da Computação Data da inscrição: 2012 Nome da universidade: XYZ Salário: 50000 Número de artigos publicados: 209 Número de artigos pendentes: 100
Instruções de uso:Como mostrado no exemplo acima, temos três interfaces. Interface1e2é uma interface simples, a interface3é uma interface aninhada, contendo1e2interface.1e interfaces2sofrer qualquer alteração, a interface3também será refletido. Se a interface3podem acessar as interfaces1e2contém todos os métodos.
aninhamento de métodos da interface:
package main import "fmt" // Interface 1 type AuthorDetails interface { details() } // Interface 2 type AuthorArticles interface { articles() } // Interface 3 //Interface3 embutido na interface1e métodos da interface type FinalDetails interface { details() articles() } // estrutura type author struct { a_name string branch string college string year int salary int particles int tarticles int } // Implementação da interface1métodos func (a author) details() { fmt.Printf("Autor: %s", a.a_name) fmt.Printf("\nDepartamento: %s Data de Aprovação: %d", a.branch, a.year) fmt.Printf("\nNome da Universidade: %s", a.college) fmt.Printf("\nSalário: %d", a.salary) fmt.Printf("\nNúmero de artigos publicados: %d", a.particles) } // Implementação da interface2métodos func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNúmero de artigos pendentes: %d", pendingarticles) } func main() { // Atribuição de estruturas values := author{ a_name: "Mickey", branch: "Ciência da Computação", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, }
Saída:
Autor: Mickey Departamento: Ciência da Computação Data da inscrição: 2012 Nome da universidade: XYZ Salário: 50000 Número de artigos publicados: 209 Número de artigos pendentes: 100
Instruções de uso:Como mostrado no exemplo acima, temos três interfaces. Interface1e2é uma interface simples, a interface3é uma interface aninhada, contendo1e2assinatura do método da interface. Portanto, se a interface1e interfaces2qualquer alteração em um método, ele refletirá na interface3de.3podem acessar as interfaces1e2contém todos os métodos.
Exemplo de interface aninhada e interface com métodos próprios3:
package main import "fmt" // Interface 1 type AuthorDetails interface { details() } // Interface 2 type AuthorArticles interface { articles() picked() } // Interface 3 //Interface3Interface aninhada1e interfaces2,ao mesmo tempo, adicionou seus próprios métodos type FinalDetails interface { details() AuthorArticles cdeatils() } // Estrutura 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 } // Implementação da interface1métodos func (a author) details() { fmt.Printf("Autor: %s", a.a_name) fmt.Printf("\nDepartamento: %s Data de Aprovação: %d", a.branch, a.year) fmt.Printf("\nNome da Universidade: %s", a.college) fmt.Printf("\nSalário: %d", a.salary) fmt.Printf("\nNúmero de artigos publicados: %d", a.particles) } // Implementação da interface2métodos func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\nNúmero de artigos pendentes: %d", pendingarticles) } func (a author) picked() { fmt.Printf("\nNúmero total de artigos selecionados: %d", a.pick) } // Método aninhado implementado na interface func (a author) cdeatils() { fmt.Printf("\nID do autor: %d", a.cid) fmt.Printf("\nSubmissão: %s", a.post) } func main() { //Atribuição de estruturas values := author{ a_name: "Mickey", branch: "Ciência da Computação", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, cid: 3087, post: "Escritor de conteúdo técnico", pick: 58, } // usar a interface FinalDetails para acessar a interface1,2métodos var f FinalDetails = values f.details() f.articles() f.picked() f.cdeatils() }
Saída:
Autor: Mickey Departamento: Ciência da Computação Data da inscrição: 2012 Nome da universidade: XYZ Salário: 50000 Número de artigos publicados: 209 Número de artigos pendentes: 100 Número total de artigos selecionados: 58 ID do autor: 3087 Submissão: Escritor de conteúdo técnico
Instruções de uso:Como mostrado no exemplo acima, temos três interfaces. Interface1e2é uma interface simples, enquanto a interface3é uma interface aninhada, que contém interfaces1o nome do método da interface2e seus próprios métodos. Portanto, se a interface1métodos e interfaces2Caso ocorra qualquer alteração, ela será refletida nas interfaces3de.3podem acessar as interfaces1Todos os métodos, incluindo as interfaces1、2e seus próprios métodos.