gpt4 book ai didi

go - 为什么结构可以作为函数的接口(interface)传递?

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:17 24 4
gpt4 key购买 nike

我有一些 example code将接口(interface)作为输入,如下所示。

type RouteGuideServer interface {
...
}

func RegisterRouteGuideServer(s *grpc.Server, srv RouteGuideServer) {
s.RegisterService(&_RouteGuide_serviceDesc, srv)
}

一切都很好,但是当实现这个服务器时,我们有以下代码,它为函数提供了一个结构(实现接口(interface)),如下所示。

type routeGuideServer struct {
...
}

...

pb.RegisterRouteGuideServer(grpcServer, &routeGuideServer{})

我希望在给定错误的类型时抛出错误。为什么这样行得通?我觉得这不应该起作用?

我会收到任何反馈,谢谢!

最佳答案

接口(interface) 定义了一组方法。具有这些方法的任何类型都“实现”了该接口(interface)。

在您的例子中,您有一个实现接口(interface)所有方法的结构类型。这意味着该结构类型的值可以在需要此类接口(interface)的任何地方使用。当您像以前一样将结构值传递给函数时,编译器将检查该值是否实现了接口(interface)的所有功能,如果实现了,则将该值作为接口(interface)发送给该函数。在函数外部你有你的结构值,但在函数内部,你只能看到那个接口(interface)的函数。但是,您可以进行类型断言并恢复该接口(interface)的值:

func (f interfaceType) {
if k, ok := f.(myType); ok {
// Here, k is the value of the interface, which is of type "myType"
}

关于go - 为什么结构可以作为函数的接口(interface)传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com