golang-方法多参数传递

多参数处理

业务中根据传入的参数可控制返回的参数,此时接受函数句没必要一个一个接受参数,可以全部都复制给一个结构体,然后业务处理的时候根据不同业务进行不同处理即可

目录

.
├── 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"}
}

版权声明:本文为qq_39787367原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。