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

Основной учебник Golang

Управляющие инструкции Golang

Функции и методы Golang

Структуры Golang

Срезы и массивы Golang

Строки String Golang

Указатели Golang

Интерфейсы Golang

Конкурентоспособность Golang

Ошибка Golang

Другие темы Golang

Множественные интерфейсы в Go

В Go-языке интерфейс является集合ом метода подписи, это также тип, что означает, что вы можете создавать переменные типа интерфейса. В Go-языке вы можете создавать несколько интерфейсов в программе с помощью заданной грамматики:

type interface_name interface{
//метод签名
}

Примечание:В Go-языке не разрешается создавать методы с одинаковыми именами в двух или более интерфейсах. Если вы попробуете это сделать, ваш程序 будет аварийно завершен. Давайте рассмотрим несколько интерфейсов с помощью примера.

//多个接口的概念
package main
import "fmt"
// 接口 1
type AuthorDetails interface {
    details()
}
// 接口 2
type AuthorArticles interface {
    articles()
}
// 结构体
type author struct {
    a_name    string
    branch    string
    college   string
    year      int
    salary    int
    particles int
    tarticles int
}
//实现接口方法1
func (a author) details() {}
    fmt.Printf("Автор: %s", a.a_name)
    fmt.Printf("\nОтдел: %s, через дату: %d", a.branch, a.year)
    fmt.Printf("\nНазвание школы: %s", a.college)
    fmt.Printf("\nЗарплата: %d", a.salary)
    fmt.Printf("\nКоличество опубликованных статей: %d", a.particles)
}
//Реализация метода интерфейса 2
func (a author) articles() {
    pendingarticles := a.tarticles - a.particles
    fmt.Printf("\nНеопубликованные статьи: %d", pendingarticles)
}
//Основное значение
func main() {
    //Ассигнование структуры
    values := author{
        a_name: "Mickey",
        branch: "Computer science",
        college: "XYZ",
        year: 2012,
        salary: 50000,
        particles: 209,
        tarticles: 309,
    }
    //Доступ к методам с использованием интерфейса 1
    var i1 AuthorDetails = values
    i1.details()
    //Доступ к методам с использованием интерфейса 2
    var i2 AuthorArticles = values
    i2.articles()
}

Вывод:

Автор: Mickey
Отдел: Computer science, через дату: 2012
Название школы: XYZ
Зарплата: 50000
Количество опубликованных статей: 209
Неопубликованные статьи: 100

Объяснение использования:Как показано в примере выше, у нас есть два интерфейса с методами, namely details() и Articles(). В данном случае метод details() предоставляет основные подробные данные автора, а метод articles() предоставляет неопубликованные статьи автора.

Существует также структура под названием Автор (Author), которая содержит набор переменных, значения которых используются в интерфейсе. В основных методах мы назначаем значения существующих переменных в структуре автора, чтобы они использовались в интерфейсе и создаем переменные типа интерфейса для доступаAuthorDetailsиAuthorArticlesМетоды интерфейса.