go-选项卡模式

复制代码
package main

import "fmt"

const (
    defaultName string = "张建平"
    defaultAge  int    = 27
    defaultHigh int    = 175
)

type User struct {
    Name string
    Age  int
    High int
}

type UserOptions struct {
    Name string
    Age  int
    High int
}

type UserOption interface {
    apply(*UserOptions)
}

type FuncUserOption struct {
    f func(*UserOptions)
}

func (fo FuncUserOption) apply(option *UserOptions) {
    fo.f(option)
}

func WithName(name string) UserOption {
    return FuncUserOption{
        f: func(options *UserOptions) {
            options.Name = name
        },
    }
}

func WithAge(age int) UserOption {
    return FuncUserOption{
        f: func(options *UserOptions) {
            options.Age = age
        },
    }
}

func WithHigh(high int) UserOption {
    return FuncUserOption{f: func(options *UserOptions) {
        options.High = high
    }}
}

func NewUser(opts ...UserOption) *User {
    options := UserOptions{
        Name: defaultName,
        Age:  defaultAge,
        High: defaultHigh,
    }
    for _, opt := range opts {
        opt.apply(&options)
    }
    return &User{
        Name: options.Name,
        Age:  options.Age,
        High: options.High,
    }
}

func main() {
    u1 := NewUser()
    fmt.Println(u1)
    u2 := NewUser(WithName("胖虎"))
    fmt.Println(u2)
    u3 := NewUser(WithName(""), WithAge(3))
    fmt.Println(u3)
}
复制代码

 

复制代码
package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

const repeatCount = 100

func main() {
    // cat dog fish

    catCh := make(chan struct{}, 1)
    dogCh := make(chan struct{}, 1)
    fishCh := make(chan struct{}, 1)
    wg.Add(3)
    catCh <- struct{}{}
    go printAnimal(catCh, dogCh, "cat", &wg)
    go printAnimal(dogCh, fishCh, "dog", &wg)
    go printAnimal(fishCh, catCh, "fish", &wg)
    wg.Wait()
}

func printAnimal(in, out chan struct{}, name string, wg *sync.WaitGroup) {
    count := 0
    for {
        <-in
        count++
        fmt.Println(name)
        out <- struct{}{}
        if count >= repeatCount {
            wg.Done()
            return
        }
    }
}
复制代码

 

posted @   一石数字欠我15w!!!  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
历史上的今天:
2022-06-29 Python源码导出到一个txt文件
2021-06-29 项目部署
2018-06-29 一套小学生的试卷。。。
2018-06-29 python基础小练习
2018-06-29 Django-配置celery
点击右上角即可分享
微信分享提示