用GO写一个RPC框架 s02(服务端配置)
Posted dollarkillerx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用GO写一个RPC框架 s02(服务端配置)相关的知识,希望对你有一定的参考价值。
前言
上一篇 我们讲了服务注册的内部设计, 写了一个服务的管理工具
type Server struct {
serviceMap map[string]*service
options *Options
beforeMiddleware []MiddlewareFunc
afterMiddleware []MiddlewareFunc
beforeMiddlewarePath map[string][]MiddlewareFunc
afterMiddlewarePath map[string][]MiddlewareFunc
}
这次我们看看服务的配置如何写 才最优雅
先来看看Options
type Options struct {
Protocol transport.Protocol
UseHttp bool
Uri string
nl net.Listener
ctx context.Context
options map[string]interface{} // 零散配置
Trace bool
readTimeout time.Duration
writeTimeout time.Duration
processChanSize int
MaximumLoad int64
RSAPublicKey []byte
RSAPrivateKey []byte
AuthFunc AuthFunc
Discovery discovery.Discovery
registryAddr string
weights float64
}
这里有非常多 可以填写的地方
如果我们采用 最原始的方式 这个配置就会非常的冗长 不好维护
func NewServer(protocol transport.Protocol, useHttp bool, uri string, nl net.listener ...)
我们现在引入一个新的设计方式
type Option func(options *Options)
我们定义一个 方法, 这个方法的入参 就是 我们上面看到配置的指针 我们可以更具上面的参数定义多个类似的方法
func UseTCP(host string) Option {
return func(options *Options) {
options.Uri = host
options.Protocol = transport.TCP
}
}
func UseUnix(addr string) Option {
return func(options *Options) {
options.Uri = addr
options.Protocol = transport.UNIX
}
}
func UseKCP(host string) Option {
return func(options *Options) {
options.Uri = host
options.Protocol = transport.KCP
}
}
当使用时 我们只要传入多个Option方法 就可以完成对配置的设置
func (s *Server) Run(options ...Option) error {
for _, fn := range options {
fn(s.options)
}
}
是不是就非常 清晰了呢 ...
以上是关于用GO写一个RPC框架 s02(服务端配置)的主要内容,如果未能解决你的问题,请参考以下文章