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

Golang basic tutorial

Golang control statements

Golang functions & methods

Golang structs

Golang slices & arrays

Golang strings (String)

Golang pointers

Golang interfaces

Concurrency in Golang

Golang exceptions (Error)

Other items in Golang

Interface Aninhado do Linguagem Go

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.