我想了解接口类型的simple个例子,它在围棋(语言)中的使用.

我看了网络文档,但我不明白.

推荐答案

Go接口背后的 idea 是duck typing.这很简单地解释为:如果你看起来像一只鸭子,叫起来像一只鸭子,那么你就是一只鸭子.这意味着,如果您的对象实现了所有的鸭子特性,那么将其用作鸭子应该是没有问题的.下面是一个示例:

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)
}

这里HumanWalker,DogWalker.为什么?因为他们都...嗯...Walk.它们都实现了Walk () string功能.这就是为什么你可以在它们上执行MakeWalk.

当您希望不同类型的人以相同的方式行事时,这非常有用.一个实际的例子是文件类型的对象(套接字、文件对象)——所有这些对象都需要一个写函数和一个读函数.然后你可以用同样的方式写和读,而不依赖于它们的类型——这很酷.

Go相关问答推荐

无法在Macos上使用Azure Speech golang SDK

读取JSON数据并在网页上显示

理解Golang并发:缓冲通道的意外行为

仅呈现一个模板的GIN Web应用程序

有没有办法通过Go cmdline或IDE(IntelliJ)找出我的 struct 实现了什么接口?

在不耗尽资源的情况下处理S3文件下载

如何将GoFr筛选器用于查询参数?

Go中的net.SplitHostPort(r.RemoteAddr)安全性

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

关于如何使用 Service Weaver 设置多个不同侦听器的问题

如何根据中间件的请求设置上下文值?获取 go-staticcheck 问题

Go 中的sync.Cond 与 Wait 方法

testcontainers:如何修复绑定源路径不存在

无法在go中为docker容器写入有效的挂载路径

这是泛型的有效用例吗?

使用 Go Colly 抓取所有可能的标签并将它们放入一个变量中

如何在 Golang 中打印 2 列表?

使用go doc命令查看示例函数?

curl:(56)Recv失败:连接由golang中的对等方与docker重置

Go GCP 同时模拟两个服务帐户