news 2026/6/15 11:54:49

go: Broadcast Pattern

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go: Broadcast Pattern

项目结构:

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:25 # User : geovindu # Product : GoLand # Project : godesginpattern # File : model.go */ package message // JewelryMessage 珠宝行业标准广播消息 type JewelryMessage struct { Title string // 消息标题 Content string // 消息内容 Product string // 产品名称 Material string // 原料 Batch string // 批次 Standard string // 质检标准 WarehouseLocation string // 仓位 MarketingContent string // 营销内容 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:26 # User : geovindu # Product : GoLand # Project : godesginpattern # File : errors.go */ package core import "errors" // 广播相关错误 var ( ErrSubscriberNil = errors.New("订阅者不能为空") ErrSubscriberDup = errors.New("订阅者已存在") ) /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:26 # User : geovindu # Product : GoLand # Project : godesginpattern # File : subscriber.go */ package iface import "godesginpattern/broadcast/message" // Subscriber 订阅者接口(所有业务系统必须实现) type Subscriber interface { Name() string // 系统名称 OnReceive(msg message.JewelryMessage) // 接收广播消息 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:27 # User : geovindu # Product : GoLand # Project : godesginpattern # File : broadcast.go */ package core import ( "fmt" "godesginpattern/broadcast/iface" "godesginpattern/broadcast/message" "sync" ) // BroadcastEngine 广播引擎(单例) type BroadcastEngine struct { subscribers []iface.Subscriber lock sync.RWMutex // 线程安全 } var instance *BroadcastEngine var once sync.Once // NewBroadcastEngine 单例模式获取全局广播引擎 func NewBroadcastEngine() *BroadcastEngine { once.Do(func() { instance = &BroadcastEngine{ subscribers: make([]iface.Subscriber, 0), } }) return instance } // Subscribe 订阅广播 func (e *BroadcastEngine) Subscribe(sub iface.Subscriber) error { if sub == nil { return ErrSubscriberNil } e.lock.Lock() defer e.lock.Unlock() // 去重 for _, s := range e.subscribers { if s.Name() == sub.Name() { return ErrSubscriberDup } } e.subscribers = append(e.subscribers, sub) return nil } // Broadcast 向所有订阅者广播消息 func (e *BroadcastEngine) Broadcast(msg message.JewelryMessage) { e.lock.RLock() defer e.lock.RUnlock() fmt.Println("\n=============================================") fmt.Println("📢 广播引擎开始全局广播:", msg.Title) fmt.Println("📄 消息内容:", msg.Content) fmt.Println("=============================================\n") // 同步发送给所有订阅者 for _, sub := range e.subscribers { sub.OnReceive(msg) } }
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:27 # User : geovindu # Product : GoLand # Project : godesginpattern # File : procurement.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // ProcurementSystem 原料采购系统 type ProcurementSystem struct{} func (p *ProcurementSystem) Name() string { return "原料采购系统" } func (p *ProcurementSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("📦【", p.Name(), "】已同步原料溯源:", msg.Material) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:28 # User : geovindu # Product : GoLand # Project : godesginpattern # File : production.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // ProductionSystem 生产加工系统 type ProductionSystem struct{} func (p *ProductionSystem) Name() string { return "生产加工系统" } func (p *ProductionSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("⚙️【", p.Name(), "】已排产:", msg.Product, " 批次 ", msg.Batch) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:28 # User : geovindu # Product : GoLand # Project : godesginpattern # File : quality.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // QCSystem 质量检测系统 type QCSystem struct{} func (q *QCSystem) Name() string { return "质量检测系统" } func (q *QCSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🔍【", q.Name(), "】已加载质检标准:", msg.Standard) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : warehouse.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // WarehouseSystem 仓储管理系统 type WarehouseSystem struct{} func (w *WarehouseSystem) Name() string { return "仓储管理系统" } func (w *WarehouseSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("📦【", w.Name(), "】已预留仓位:", msg.WarehouseLocation) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : sales.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // StoreSalesSystem 全国门店销售系统 type StoreSalesSystem struct{} func (s *StoreSalesSystem) Name() string { return "全国门店销售系统" } func (s *StoreSalesSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🏬【", s.Name(), "】已上架新品:", msg.Product) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : marketing.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // MemberMarketingSystem 会员营销系统 type MemberMarketingSystem struct{} func (m *MemberMarketingSystem) Name() string { return "会员营销系统" } func (m *MemberMarketingSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🎯【", m.Name(), "】已推送:", msg.MarketingContent) }

调用:

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast 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/8 22:30 # User : geovindu # Product : GoLand # Project : godesginpattern # File : broadcastbll.go */ package bll import ( "fmt" "godesginpattern/broadcast/business" "godesginpattern/broadcast/core" "godesginpattern/broadcast/iface" "godesginpattern/broadcast/message" ) func BroadcastMain() { // 1. 获取全局单例广播引擎 engine := core.NewBroadcastEngine() // 2. 初始化所有珠宝业务系统 systems := []iface.Subscriber{ &business.ProcurementSystem{}, &business.ProductionSystem{}, &business.QCSystem{}, &business.WarehouseSystem{}, &business.StoreSalesSystem{}, &business.MemberMarketingSystem{}, } // 3. 订阅广播 for _, sys := range systems { if err := engine.Subscribe(sys); err != nil { fmt.Println("❌ 订阅失败:", sys.Name(), " 错误:", err.Error()) continue } fmt.Println("✅ 已订阅:", sys.Name()) } // 4. 构造标准广播消息 msg := message.JewelryMessage{ Title: "2025春季冰种翡翠手镯全国上市", Content: "天然A货翡翠,统一标准、统一定价、同步发售", Product: "冰种翡翠手镯", Material: "缅甸天然翡翠", Batch: "JC20250415-001", Standard: "GB/T 16552-2017 珠宝玉石鉴定", WarehouseLocation: "广州总部仓-A03-07", MarketingContent: "VIP会员专享9折+免费刻字", } // 5. 执行全局广播 engine.Broadcast(msg) fmt.Println("\n🎉 企业级广播完成:全业务链同步成功") }

输出:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 5:43:53

Java 中两种创建线程方式的区别详解(继承 Thread vs 实现 Runnable)

一、两种方式的基础实现1. 继承 Thread 类创建线程Thread类是 Java.lang 包下的核心线程类,直接继承Thread并重写run()方法,即可创建线程任务。2. 实现 Runnable 接口创建线程Runnable是一个函数式接口(只有一个run()方法)&#x…

作者头像 李华
网站建设 2026/6/14 5:43:56

FlicFlac:Windows音频格式转换的神器,一拖一按完成无损转换

FlicFlac:Windows音频格式转换的神器,一拖一按完成无损转换 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 你是否曾因音频格式不…

作者头像 李华
网站建设 2026/6/14 5:49:33

Stable Baselines3:强化学习入门者的终极实战指南

Stable Baselines3:强化学习入门者的终极实战指南 【免费下载链接】stable-baselines3 PyTorch version of Stable Baselines, reliable implementations of reinforcement learning algorithms. 项目地址: https://gitcode.com/GitHub_Trending/st/stable-basel…

作者头像 李华
网站建设 2026/6/14 5:43:55

Maven 3.6.3 阿里云镜像预配置版|Windows/Linux/macOS 三端即装即用

本文还有配套的精品资源,点击获取 简介:直接解压就能用的 Maven 3.6.3 完整发行包,已内置阿里云中央仓库镜像地址(https://maven.aliyun.com/repository/public),省去手动改 settings.xml 的步骤。包含 …

作者头像 李华
网站建设 2026/6/14 5:44:10

一篇读懂C语言

C语言是一种通用的高级编程语言,由丹尼斯里奇(Dennis Ritchie)于20世纪70年代在贝尔实验室开发而成。它具有简洁高效、可移植性好、面向过程、指针操作、库支持、灵活性等特点,被广泛应用于系统编程、嵌入式系统、操作系统、编译器…

作者头像 李华
网站建设 2026/6/14 5:44:12

微信聊天记录永久保存终极指南:轻松掌握个人数据管理

微信聊天记录永久保存终极指南:轻松掌握个人数据管理 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChat…

作者头像 李华