Подтвердить что ты не робот

Использование интерфейса в Go

Я хотел бы понять тип интерфейса с простым примером его использования в Go (Language).

Я прочитал веб-документацию, но я не понимаю.

4b9b3361

Ответ 1

Идея интерфейсов go - утиная печать. Это просто означает: если вы выглядите как утка и шарлатан, как утка, то вы утка. Это означает, что если ваш объект реализует все функции утки, тогда не должно быть проблем с его использованием в качестве утки. Вот пример:

package main

import (
    "fmt"
)

type Walker interface {
    Walk() string
}

type Human string
type Dog string

func (human Human) Walk() string { //A human is a walker
    return "I'm a man and I walked!"
}

func (dog Dog) Walk() string { //A dog is a walker
    return "I'm a dog and I walked!"
}

//Make a walker walk
func MakeWalk(w Walker) {
    fmt.Println(w.Walk())
}

func main() {
    var human Human
    var dog Dog
    MakeWalk(human)
    MakeWalk(dog)
}

Здесь a Human является a Walker, a Dog является a Walker. Зачем? Потому что они оба... ну... Walk. Они оба реализуют функцию Walk () string. Поэтому вы можете выполнить MakeWalk на них.

Это очень полезно, если вы хотите, чтобы разные типы вели себя одинаково. Практическим примером могут быть объекты типа файла (сокеты, файловые объекты) - вам понадобятся функция Write и Read для всех из них. Затем вы можете использовать Write и Read в том же режиме, независимо от их типа - это классно.

Ответ 2

Другой рабочий пример, показывающий взаимодействие между интерфейсом и структурой

package main

import "fmt"

type Info interface {
Noofchar() int
Increment()
}

type Testinfo struct {
noofchar int     
}

func (x *Testinfo) Noofchar() int {
return x.noofchar
}
func (x *Testinfo) Increment() {
x.noofchar++
}

func main(){
var t Info = &Testinfo{noofchar:1}
fmt.Println("No of char ",t.Noofchar())
t.Increment()
fmt.Println("No of char ",t.Noofchar())
}