golang的rpc选项模式一点理解

本文深入探讨了Go语言中RPC服务器配置的选项模式。通过ServerOptions结构体和ServerOption函数类型,文章详细解释了如何使用WithAddress和WithNetwork等函数进行服务器地址和网络设置,展示了函数作为变量类型在Go语言中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习rpc小册子时遇到了server端传参用了选项模式

前提:要记住在go语言里函数也是一种变量类型,和自定义的其它类型一样,也可以作为值传递,也可以当作结果赋值

如下是代码,注释是自己对这块的理解,希望对你能有些许帮助:

//ServerOptions 结构体类型
type ServerOptions struct {
   address string  
   network string  
}

//ServerOption 函数类型,参数是ServerOptions这个结构体的值
type ServerOption func(*ServerOptions)

//WithAddress 函数的返回类型是ServerOption,因为return的匿名函数是上面ServerOption的函数值
func WithAddress(address string) ServerOption{
   return func(o *ServerOptions) {
      o.address = address
   }
}
//WithNetwork 同上
func WithNetwork(network string) ServerOption {
   return func(o *ServerOptions) {
      o.network = network
   }
}

type Server struct {
   opts *ServerOptions
}

func NewServer(opt ...ServerOption) *Server{
	s := &Server {
		opts : &ServerOptions{},
	}

	for _, o := range opt {
		o(s.opts)   
	}
}
//对o(s.opts)的理解:
//这里的o是ServerOption这个函数类型数组里的值,即With函数;s.opts是ServerOptions结构体的指针;
//即o = func(o *ServerOptions) { o.network=network},此时o(s.opts)就是调用这个匿名函数,s.opts就是调用这个函数传的参数


//调用,创建server
opts := []ServerOption{
   WithAddress("127.0.0.1:8000"),
   WithNetwork("tcp"),
}
s := NewServer(opts ...)

注意

  • 这个里面比较绕的是ServerOption这个函数类型和ServerOptions这个结构体类型,要注意区分下;
  • golang语言里函数是单独的自定义类型;方法是依附于某个自定义类型的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值