gpt4 book ai didi

go - 尽管在 golang 中匹配参数,为什么我不能将 func 文字用作自定义 func 类型?

转载 作者:IT王子 更新时间:2023-10-29 01:27:06 24 4
gpt4 key购买 nike

google.golang.org/grpc 将类型 UnaryClientInterceptor 定义为:

type UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error

在我的代码中,我想做类似的事情:

func clientInterceptor() grpc.UnaryClientInterceptor {
return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
//intercept stuff
return invoker(ctx, method, req, reply, cc, opts...)
}
}

但是我得到这个错误:

“不能使用 func 文字(类型 func("context".Context, string, interface {}, interface {}, *grpc.ClientConn, grpc.UnaryInvoker, ...grpc.CallOption) 错误)作为 grpc 类型。返回参数中的 UnaryClientInterceptor”

查看Why can I type alias functions and use them without casting?我的印象是在我的 clientInterceptor() 中返回的匿名函数应该匹配 grpc.ClientInterceptor 类型。

此外,来自类型标识规范 ( http://golang.org/ref/spec#Type_identity )

Two function types are identical if they have the same number of parameters and result values, corresponding parameter and result types are identical, and either both functions are variadic or neither is. Parameter and result names are not required to match.

我试过转换和制作 grpc.UnaryClientInterceptor 类型的变量,但没有任何效果。

我也对 grpc.UnaryServerInterceptor 做了基本相同的事情,没有遇到任何问题。

我在这里错过了什么?

最佳答案

您引用的 context 包可能不同于您的 grpc 版本。从 Go 1.7 开始,包从 golang.org/x/net/context 移动到 context,编译器可能不会将它们视为等同的。

关于go - 尽管在 golang 中匹配参数,为什么我不能将 func 文字用作自定义 func 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43901235/

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