资讯动态

go: Broadcast Pattern

发布时间:2026/10/6 23:30:24 来源:尧图企业网站定制
项目结构/* # 版权所有 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 企业级广播完成全业务链同步成功) }输出

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑