项目结构:

Go
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:38
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : config.go
*/
package config
// 配置层
// 全局任务通道(Fan-Out 核心队列)
var TaskQueue = make(chan interface{}, 100)
// 业务配置
const (
OrderInterval = 1 // 下单间隔秒
)
// 彩色定义 无红色
// 全局颜色常量 统一管理
const (
COLOR_CYAN = "\033[36m"
COLOR_BLUE = "\033[34m"
COLOR_YELLOW = "\033[33m"
COLOR_GREEN = "\033[32m"
COLOR_RESET = "\033[0m"
)
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:38
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : order.go
*/
package models
// 模型层:类型安全
// JewelryOrder 珠宝订单结构体(强类型)
type JewelryOrder struct {
OrderID string
Product string
Material string
Style string
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:40
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : producer.go
*/
package core
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
// 生产者:单一职责
const (
colorYellow = "\033[33m"
colorBlue = "\033[34m"
colorReset = "\033[0m"
)
// OrderProducer 订单生产者
type OrderProducer struct{}
func NewOrderProducer() *OrderProducer {
return &OrderProducer{}
}
// Produce 生成订单并发送到通道
func (p *OrderProducer) Produce() {
println(config.COLOR_BLUE + "\n===== 客户订单开始生成 =====" + config.COLOR_RESET)
orders := []models.JewelryOrder{
{"J2025001", "18K金钻石戒指", "18K金+50分钻石", "经典六爪"},
{"J2025002", "翡翠玉镯", "A货翡翠", "复古圆条"},
{"J2025003", "铂金项链", "PT950铂金", "简约锁骨链"},
}
for _, o := range orders {
println(config.COLOR_YELLOW + "📝 新订单:" + o.Product + " | " + o.OrderID + config.COLOR_RESET)
config.TaskQueue <- o
time.Sleep(time.Duration(config.OrderInterval) * time.Second)
}
close(config.TaskQueue)
println(config.COLOR_BLUE + "===== 所有订单生成完成 =====" + config.COLOR_RESET)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:40
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : dispatcher.go
*/
package core
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"godesginpattern/fanout/workers"
"sync"
)
// 扇出分发器:Go 高并发核心
const (
colorCyan = "\033[36m"
// colorReset = "\033[0m"
)
// FanOutDispatcher 扇出分发器
type FanOutDispatcher struct{}
func NewFanOutDispatcher() *FanOutDispatcher {
return &FanOutDispatcher{}
}
// Start 启动分发器监听通道
func (d *FanOutDispatcher) Start() {
for task := range config.TaskQueue {
order, ok := task.(models.JewelryOrder)
if !ok {
continue
}
println(colorCyan + "\n===== 订单" + order.OrderID + " 扇出分发启动 =====" + colorReset)
d.executeParallel(order)
println(colorCyan + "===== 订单" + order.OrderID + " 全流程完成 =====" + colorReset)
}
}
// executeParallel 并行执行所有工作器(Go 原生 goroutine + WaitGroup)
func (d *FanOutDispatcher) executeParallel(order models.JewelryOrder) {
var wg sync.WaitGroup
for _, worker := range workers.AllWorkers {
wg.Add(1)
// 异步执行(Go 高并发核心)
go func(w workers.WorkerFunc) {
defer wg.Done()
w(order)
}(worker)
}
wg.Wait()
}
Go
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:39
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : material.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
const (
colorGreen = "\033[32m"
colorReset = "\033[0m"
)
func MaterialCheck(order models.JewelryOrder) {
println(config.COLOR_GREEN + "[原料核验] 订单" + order.OrderID + ":检查" + order.Material + "库存、GIA证书" + config.COLOR_RESET)
time.Sleep(1 * time.Second)
println(config.COLOR_GREEN + "[原料核验] 订单" + order.OrderID + ":核验完成 ✅" + config.COLOR_RESET)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:39
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : design.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
func Design(order models.JewelryOrder) {
println("[设计制图] 订单" + order.OrderID + ":生成" + order.Style + "3D图")
time.Sleep(1500 * time.Millisecond)
println(config.COLOR_RESET + "[设计制图] 订单" + order.OrderID + ":设计定稿 ✅" + config.COLOR_RESET)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:39
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : production.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
func Production(order models.JewelryOrder) {
println(config.COLOR_BLUE + "[加工生产] 订单" + order.OrderID + ":" + order.Product + "铸造镶嵌" + config.COLOR_RESET)
time.Sleep(2 * time.Second)
println(config.COLOR_YELLOW + "[加工生产] 订单" + order.OrderID + ":生产完成 ✅" + config.COLOR_YELLOW)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:39
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : quality.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
func QualityCheck(order models.JewelryOrder) {
println("[品质质检] 订单" + order.OrderID + ":纯度/净度/工艺检测")
time.Sleep(1 * time.Second)
println(config.COLOR_GREEN + "[品质质检] 订单" + order.OrderID + ":质检合格 ✅" + config.COLOR_GREEN)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:39
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : logistics.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
func Logistics(order models.JewelryOrder) {
println("[物流发货] 订单" + order.OrderID + ":生成顺丰保价快递")
time.Sleep(500 * time.Millisecond)
println(config.COLOR_CYAN + "[物流发货] 订单" + order.OrderID + ":已发货 ✅" + config.COLOR_CYAN)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:40
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : packaging.go
*/
package workers
import (
"godesginpattern/fanout/config"
"godesginpattern/fanout/models"
"time"
)
func Packaging(order models.JewelryOrder) {
println("[礼盒包装] 订单" + order.OrderID + ":定制礼盒+证书装订")
time.Sleep(800 * time.Millisecond)
println(config.COLOR_BLUE + "[礼盒包装] 订单" + order.OrderID + ":包装完成 ✅" + config.COLOR_BLUE)
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:40
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : registry.go
*/
package workers
import "godesginpattern/fanout/models"
// 工作器注册:可扩展核心
// WorkerFunc 工作器统一函数类型
type WorkerFunc func(models.JewelryOrder)
// AllWorkers 所有工作器列表(新增工序只需在这里添加)
var AllWorkers = []WorkerFunc{
MaterialCheck,
Design,
Production,
QualityCheck,
Packaging,
Logistics,
}
调用:
Go
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Fan-Out Pattern Fan-Out 模式 扇出模式
# 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/20 10:41
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : fanoutbll.go
*/
package bll
import "godesginpattern/fanout/core"
const (
colorCyan = "\033[36m"
colorYellow = "\033[33m"
colorGreen = "\033[32m"
colorBlue = "\033[34m"
colorReset = "\033[0m"
)
func FanOutMain() {
println(colorCyan + "============================================================")
println(" 珠宝行业企业级 Fan-Out 分布式任务系统(Go 彩色版)启动成功")
println("============================================================" + colorReset)
// 初始化核心组件
producer := core.NewOrderProducer()
dispatcher := core.NewFanOutDispatcher()
// 启动分发器(后台 goroutine)
go dispatcher.Start()
// 启动生产者
producer.Produce()
println("\n" + colorGreen + "============================================================")
println(" 所有订单处理完成,系统安全退出")
println("============================================================" + colorReset)
}
输出:
