go - 如何使用类型 func(*dialOptions)

标签 go grpc

我正在尝试使用 GoLang grpc 库来制作拨号盘。 GRPC.dial 有一个像这样的方法签名:

func Dial(target string, opts ...DialOption) (*ClientConn, error)

DialOption 是这样的类型:

    DialOptions func(*dialOptions)

dialOptions 本身是一个带有其他参数的结构,但我想在 transport.ConnectOptions 中传递 userAgent 字符串,这是另一个结构:

type dialOptions struct {
unaryInt    UnaryClientInterceptor
streamInt   StreamClientInterceptor
...
...
...

copts       transport.ConnectOptions
}


type ConnectOptions struct {
    // UserAgent is the application user agent.
    UserAgent string
...
...
}

如何将我的用户代理与 Dial 函数一起传递?

图书馆链接here .

最佳答案

这是 Dave Cheney 在此处概述的功能选项示例:

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

实质是您发送一个可选函数,该函数修改由 Dial 函数创建的 ClientConn。该库带有一组预定义的,包括一个用于更改 user-agent 的:

https://godoc.org/google.golang.org/grpc#WithUserAgent

所以你的代码变成:

dialWithUserAgent := grpc.Dial("target", grpc.WithUserAgent("user-agent"))

关于go - 如何使用类型 func(*dialOptions),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186553/

相关文章:

go - 将 go 应用程序部署到 Bluemix 后服务器无法启动

go - 如何在工作池中发送 GO 例程

spring-boot - 如何正确传播gRPC错误Spring-boot

java - 通过 Google Cloud 上的 Ingress 公开 GRPC 服务器

json - 如何在protobuf或grpc中使用json作为结构体成员?

database - 无法使 Goose DB Migration 用于 Go 测试

datetime - 如何在golang中将RFC3339格式转换为ISO8601?

unit-testing - Golang - 使用文件系统进行测试并达到 100%

go - gRPC 可以集成到 flutter-web 中吗?

go - 如何使用 grpc 方法处理程序解决此问题