在Go中使用接口

Spe*_*ccy 13 interface go

我想了解接口类型,并在Go(语言)中使用它的一个简单示例.

我阅读了网络文档,但我没有得到它.

Ale*_*aru 39

go接口背后的想法是鸭子打字.这简单地转化为:如果你看起来像鸭子和庸医像鸭子那么你就是一只鸭子.这意味着如果你的对象实现了所有duck的功能,那么使用它作为duck就没有问题.这是一个例子:

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)
}
Run Code Online (Sandbox Code Playgroud)

这里a Human是a Walker,a Dog是a Walker.为什么?因为他们都..嗯... Walk.他们都实现了这个Walk () string功能.所以这就是你可以执行MakeWalk它们的原因.

当您希望不同类型以相同方式运行时,这非常有用.一个实际的例子是文件类型对象(套接字,文件对象) - 你需要一个Write和Read函数.然后你可以使用独立于其类型的相同方式使用Write和Read - 这很酷.

  • 谢谢!这真的是我想知道的.比在go教程中更清晰. (7认同)