go: Coroutines Pattern

项目结构:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:09
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : jewelry.go
*/
package domain
 
type Jewelry struct {
    ID          string
    Name        string
    Material    string
    Status      string
    Certificate string
}
 
const (
    StatusPending    = "待采购"
    StatusPurchasing = "采购中"
    StatusPurchased  = "原料已到货"
    StatusChecking   = "质检中"
    StatusChecked    = "质检合格"
    StatusProcessing = "加工中"
    StatusProcessed  = "成品完成"
    StatusAuthing    = "鉴定中"
    StatusAuthed     = "已获证书"
    StatusSelling    = "销售中"
    StatusSold       = "已销售出库"
)
 
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:10
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : config.go
*/
package config
 
var Delay = map[string]int{
    "Purchase": 2,
    "Check":    1,
    "Process":  3,
    "Auth":     2,
    "Sell":     1,
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:10
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : logger.go
*/
package core
 
import (
    "log"
    "os"
)
 
var Logger = log.New(os.Stdout, "[Jewelry] ", log.LstdFlags|log.Lmicroseconds)
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:11
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : purchase.go
*/
package service
 
import (
    "godesginpattern/coroutines/config"
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "time"
)
 
func Purchase(j *domain.Jewelry) {
    j.Status = domain.StatusPurchasing
    core.Logger.Printf("【采购】开始 %s | %s", j.ID, j.Name)
    time.Sleep(time.Duration(config.Delay["Purchase"]) * time.Second)
    j.Status = domain.StatusPurchased
    core.Logger.Printf("【采购】完成 %s", j.ID)
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:12
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : check.go
*/
package service
 
import (
    "godesginpattern/coroutines/config"
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "time"
)
 
func Check(j *domain.Jewelry) {
    j.Status = domain.StatusChecking
    core.Logger.Printf("【质检】开始 %s", j.ID)
    time.Sleep(time.Duration(config.Delay["Check"]) * time.Second)
    j.Status = domain.StatusChecked
    core.Logger.Printf("【质检】完成 %s", j.ID)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:12
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : process.go
*/
package service
 
import (
    "godesginpattern/coroutines/config"
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "time"
)
 
func Process(j *domain.Jewelry) {
    j.Status = domain.StatusProcessing
    core.Logger.Printf("【加工】开始 %s", j.ID)
    time.Sleep(time.Duration(config.Delay["Process"]) * time.Second)
    j.Status = domain.StatusProcessed
    core.Logger.Printf("【加工】完成 %s", j.ID)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:12
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : auth.go
*/
package service
 
import (
    "godesginpattern/coroutines/config"
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "time"
)
 
func Auth(j *domain.Jewelry) {
    j.Status = domain.StatusAuthing
    core.Logger.Printf("【鉴定】开始 %s", j.ID)
    time.Sleep(time.Duration(config.Delay["Auth"]) * time.Second)
    j.Certificate = "NGTC-" + j.ID + "-AUTH"
    j.Status = domain.StatusAuthed
    core.Logger.Printf("【鉴定】完成 %s | 证书: %s", j.ID, j.Certificate)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:13
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : sell.go
*/
package service
 
import (
    "godesginpattern/coroutines/config"
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "time"
)
 
func Sell(j *domain.Jewelry) {
    j.Status = domain.StatusSelling
    core.Logger.Printf("【销售】开始 %s", j.ID)
    time.Sleep(time.Duration(config.Delay["Sell"]) * time.Second)
    j.Status = domain.StatusSold
    core.Logger.Printf("【销售】完成 %s", j.ID)
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:13
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : flow.go
*/
package workflow
 
import (
    "godesginpattern/coroutines/core"
    "godesginpattern/coroutines/domain"
    "godesginpattern/coroutines/service"
)
 
// 异步协程全流程(Go 原生 goroutine + channel)
func RunFlow(j *domain.Jewelry, done chan bool) {
    core.Logger.Printf("===== 启动流程 %s | %s =====", j.ID, j.Name)
 
    // 协程异步执行(可暂停、可恢复、非阻塞)
    service.Purchase(j)
    service.Check(j)
    service.Process(j)
    service.Auth(j)
    service.Sell(j)
 
    core.Logger.Printf("===== 全部完成 %s | 状态: %s =====", j.ID, j.Status)
    done <- true
} 

调用:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Coroutines Pattern  协程模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : goLang 2024.3.6 go 26.2
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/10 21:15
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : coroutinesbll.go
*/
package bll
 
import (
    "godesginpattern/coroutines/domain"
    "godesginpattern/coroutines/workflow"
)
 
func CoroutinesMain() {
    // 创建3件珠宝(和Python版完全一样)
    jewelryList := []*domain.Jewelry{
        {ID: "J001", Name: "18K金钻石项链", Material: "黄金+钻石", Status: domain.StatusPending},
        {ID: "J002", Name: "冰种翡翠手镯", Material: "翡翠", Status: domain.StatusPending},
        {ID: "J003", Name: "铂金戒指", Material: "铂金", Status: domain.StatusPending},
    }
 
    // 异步协程并发执行(Go 高并发核心)
    done := make(chan bool, len(jewelryList))
 
    for _, j := range jewelryList {
        go workflow.RunFlow(j, done) // 启动协程!
    }
 
    // 等待全部完成
    for range jewelryList {
        <-done
    }
 
    close(done)
}

输出:

相关推荐
Stick_ZYZ1 小时前
A2A:让 Agent 从单兵作战走向团队协作
java·开发语言·网络·人工智能·python·ai
江屿风1 小时前
C++图论基础拓扑排序算法流食般投喂
开发语言·c++·笔记·算法·排序算法
郝学胜-神的一滴1 小时前
Qt 高级开发 030:QListWidget 右键菜单全解,从策略配置到精准删除的优雅实现
开发语言·c++·qt·程序人生·用户界面
knighthood20011 小时前
ros2-quick-runner插件v0.0.4版本发布
android·java·开发语言
All_Will_Be_Fine噻1 小时前
重建R环境
开发语言·r语言
磊 子1 小时前
二.内核讲解
开发语言·操作系统·系统
zyl837211 小时前
Java 后端完整技术栈
java·开发语言
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第107题】【并发篇】第7题:说说 Lock 锁?
java·开发语言·面试
星栈独行2 小时前
用 Rust + Makepad 做一个 JSON 查看器:从零到能用的全过程
开发语言·程序人生·ui·rust·json