函数的不定参数你是这样用吗?

简介: 函数的不定参数你是这样用吗?

如果一个方法中需要传递多个参数且某些参数又是非必传,应该如何处理?

案例

// NewFriend 寻找志同道合朋友
func NewFriend(sex int, age int, hobby string) (string, error) {
 
 // 逻辑处理 ...
 return "", nil
}

NewFriend(),方法中参数 sexage 为非必传参数,这时方法如何怎么写?

传参使用不定参数!

想一想怎么去实现它?

看一下这样写可以吗?

// Sex 性别
type Sex int
// Age 年龄
type Age int
// NewFriend 寻找志同道合的朋友
func NewFriend(hobby string, args ...interface{}) (string, error) {
 for _, arg := range args {
  switch arg.(type) {
  case Sex:
   fmt.Println(arg, "is sex")
  case Age:
   fmt.Println(arg, "is age")
  default:
   fmt.Println("未知的类型")
  }
 }
 return "", nil
}

有没有更好的方案呢?

传递结构体... 恩,这也是一个办法。

咱们看看别人的开源代码怎么写的呢,我学习的是 grpc.Dial(target string, opts …DialOption) 方法,它都是通过 WithXX 方法进行传递的参数,例如:

conn, err := grpc.Dial("127.0.0.1:8000",
 grpc.WithChainStreamInterceptor(),
 grpc.WithInsecure(),
 grpc.WithBlock(),
 grpc.WithDisableRetry(),
)

比着葫芦画瓢,我实现的是这样的,大家可以看看:

// Option custom setup config
type Option func(*option)
// option 参数配置项
type option struct {
 sex int
 age int
}
// NewFriend 寻找志同道合的朋友
func NewFriend(hobby string, opts ...Option) (string, error) {
 opt := new(option)
 for _, f := range opts {
  f(opt)
 }
 fmt.Println(opt.sex, "is sex")
 fmt.Println(opt.age, "is age")
 return "", nil
}
// WithSex sex 1=female 2=male
func WithSex(sex int) Option {
 return func(opt *option) {
  opt.sex = sex
 }
}
// WithAge age
func WithAge(age int) Option {
 return func(opt *option) {
  opt.age = age
 }
}

使用的时候这样调用:

friends, err := friend.NewFriend(
 "看书",
 friend.WithAge(30),
 friend.WithSex(1),
)
if err != nil {
 fmt.Println(friends)
}

这样写如果新增其他参数,是不是也很好配置呀。

目录
相关文章
|
2月前
|
设计模式 Python
学习函数的参数传递和返回值
在编写函数时,不可避免地会出现一些错误。通过调试代码,查看参数的值在函数内部的变化以及返回值是否符合预期,有助于更好地理解参数传递和返回值的机制。
|
3月前
|
Shell PHP
escapeshellarg() 函数
escapeshellarg() 函数
|
8月前
|
存储 编译器 C++
|
6月前
|
语音技术
语音识别----函数基础定义联系案例,函数的参数,函数的参数练习案例,函数的返回值定义语法,函数返回值之None,函数的说明文档,函数的嵌套调用,变量在函数中的作用域,内部变量变全局变量用global
语音识别----函数基础定义联系案例,函数的参数,函数的参数练习案例,函数的返回值定义语法,函数返回值之None,函数的说明文档,函数的嵌套调用,变量在函数中的作用域,内部变量变全局变量用global
|
6月前
写一个函数
【7月更文挑战第4天】写一个函数。
45 2
|
8月前
|
存储 Serverless Python
函数的返回值
在编程中,函数不仅用于执行特定的任务,还经常用于计算和返回结果。函数的返回值是函数执行完毕后向调用者提供的信息或数据。通过返回值,我们可以从函数中获取所需的结果,并将其用于后续的计算或操作。本文将详细讨论函数的返回值,并附上相应的代码示例。
273 1
|
8月前
|
存储 编译器 Serverless
C++系列十:函数
C++系列十:函数
|
8月前
|
定位技术 C++ Python
C++一个函数返回两个或更多个返回值的方法
C++一个函数返回两个或更多个返回值的方法
223 1
|
8月前
|
存储 C#
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。
157 0

热门文章

最新文章