关于kratos的底层赋值参考-函数式选项模式

package main

import (
    "fmt"
    "time"
)

func main() {
    s := NewServices(
        SetName("peter"),
        SetTimeout(time.Second*5),
    )

    fmt.Println("name:", s.conf.Name)
    fmt.Println("time", s.conf.Timeout)
}

type Option func(options *Config)

type Config struct {
    Name    string
    Timeout time.Duration
}

type Services struct {
    conf Config
}

func SetTimeout(t time.Duration) Option {
    return func(options *Config) {
        options.Timeout = t
    }
}

func SetName(name string) Option {
    return func(options *Config) {
        options.Name = name
    }
}

func NewServices(opts ...Option) Services {
    c := Config{}
    for _, op := range opts {
        op(&c)
    }
    s := Services{}
    s.conf = c
    return s
}

 

posted @ 2021-03-30 17:50  雨V幕  阅读(76)  评论(0编辑  收藏  举报