Я хотел бы понять тип интерфейса с простым примером его использования в Go (Language).
Я прочитал веб-документацию, но я не понимаю.
Я хотел бы понять тип интерфейса с простым примером его использования в Go (Language).
Я прочитал веб-документацию, но я не понимаю.
Идея интерфейсов 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 в том же режиме, независимо от их типа - это классно.
Другой рабочий пример, показывающий взаимодействие между интерфейсом и структурой
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())
}