多参数处理
业务中根据传入的参数可控制返回的参数,此时接受函数句没必要一个一个接受参数,可以全部都复制给一个结构体,然后业务处理的时候根据不同业务进行不同处理即可
目录
.
├── demo1.go
├── demo2.go
├── go.mod
├── go.sum
├── moreArgs
│ ├── kv.go
│ └── op.go
demo2.go
package main
import "test/moreArgs"
func main(){
NewKv := moreArgs.NewKv()
NewKv.Put(moreArgs.WithLimit(int64(100)),moreArgs.WithGroup(true),moreArgs.WithOrder(true))
}
op.go
/**
* @Author: zhangsan
* @Description:
* @File: kv
* @Version: 1.0.0
* @Date: 2021/1/11 下午5:21
*/
package moreArgs
type Op struct {
limit int64
order bool
group bool
key string
value string
}
type Options func (op *Op)
func WithLimit(limit int64) Options{
return func(op *Op) {op.limit= limit}
}
func WithOrder(or bool) Options{
return func(op *Op) {op.order= or}
}
func WithGroup(or bool) Options{
return func(op *Op) {op.group= or}
}
//定义处理函数,返回的是新的ret
func OpPut(opts... Options) Op{
ret := Op{key: "string key",value: "string value"}
ret.applyOpts(opts)
return ret
}
func (op *Op)applyOpts(opts []Options){
for _,opt := range opts{
opt(op)
}
}
kv.go
/**
* @Author: zhangsan
* @Description:
* @File: kv
* @Version: 1.0.0
* @Date: 2021/1/11 下午5:21
*/
package moreArgs
import (
"fmt"
"time"
)
type kv struct {
name string
}
type PutResp struct {
name string
}
func NewKv() kv{
return kv{name: "lisi"}
}
func (k *kv) Put(op... Options) PutResp{
return k.Do(op...)
}
//此用可用一个type 区分具体类型,然后分开处理
func (k *kv)Do(op... Options)PutResp{
args := OpPut(op...)
time.Sleep(100*time.Second)
fmt.Println(args)
fmt.Println("处理业务请求--返回resp")
return PutResp{name: "zhangSan"}
}