项目结构展示了一个珠宝企业级系统中基于握手模式(Handshaking Pattern)的Go语言实现。系统通过JewelryWorkshop领域实体实现负载控制当工坊达到最大负载(5个订单)时拒绝新订单。核心组件包括订单处理服务(OrderService)负责订单提交与完成工坊(Workshop)通过Handshake()方法自检负载状态材料管理、质检、财务等配套服务 调用示例演示了订单全生命周期处理7个订单中前5个被接受后2个因过载被拒完成2个订单后被拒订单可重新提交。系统采用分层架构各模块职责明确通过握手机制确保系统稳定性。/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:31 # User : geovindu # Product : GoLand # Project : godesginpattern # File : config.go */ package config const ( WorkshopMaxLoad 5 // 握手模式最大负载 ) /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:38 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry_enums.go */ package enums type JewelryType string type OrderStatus string const ( DIAMOND_RING JewelryType 钻戒 GOLD_BRACELET JewelryType 黄金手镯 JADE_PENDANT JewelryType 翡翠吊坠 RUBY_NECKLACE JewelryType 红宝石项链 PLATINUM_RING JewelryType 铂金戒指 SAPPHIRE_EARRING JewelryType 蓝宝石耳环 PEARL_NECKLACE JewelryType 珍珠项链 ) const ( PRODUCING OrderStatus 生产中 COMPLETED OrderStatus 已完成 REJECTED OrderStatus 已拒绝 QC_PASS OrderStatus 质检通过 SETTLED OrderStatus 已结算 ) /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:32 # User : geovindu # Product : GoLand # Project : godesginpattern # File : exceptions.go */ package exceptions import errors var ( WorkshopOverload errors.New(工坊已满负荷) OrderNotFound errors.New(订单不存在) ) /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:32 # User : geovindu # Product : GoLand # Project : godesginpattern # File : workshop.go */ package domain import ( godesginpattern/handshaking/exceptions ) // JewelryWorkshop 珠宝工坊领域实体 type JewelryWorkshop struct { MaxLoad int CurrentOrders []string } // NewWorkshop 构造函数负载阈值由上层服务传入domain 不依赖 config func NewWorkshop(maxLoad int) *JewelryWorkshop { return JewelryWorkshop{ MaxLoad: maxLoad, CurrentOrders: []string{}, } } // Handshake 握手模式核心校验组件自检负载过载返回不可接单 func (w *JewelryWorkshop) Handshake() bool { return len(w.CurrentOrders) w.MaxLoad } // AcceptOrder 承接加工单握手失败返回过载异常 func (w *JewelryWorkshop) AcceptOrder(orderID string) error { if !w.Handshake() { return exceptions.WorkshopOverload } w.CurrentOrders append(w.CurrentOrders, orderID) return nil } // CompleteOrder 完成加工释放工位负载 func (w *JewelryWorkshop) CompleteOrder(orderID string) error { for i, id : range w.CurrentOrders { if id orderID { w.CurrentOrders append(w.CurrentOrders[:i], w.CurrentOrders[i1:]...) return nil } } return exceptions.OrderNotFound } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:36 # User : geovindu # Product : GoLand # Project : godesginpattern # File : order_repo.go */ package repository import ( godesginpattern/handshaking/enums ) type Order struct { OrderID string JewelryType enums.JewelryType Customer string Status enums.OrderStatus } var OrderDB map[string]Order{} func SaveOrder(o Order) { OrderDB[o.OrderID] o } func GetOrder(id string) (Order, bool) { o, ok : OrderDB[id] return o, ok } func UpdateStatus(id string, status enums.OrderStatus) { o : OrderDB[id] o.Status status OrderDB[id] o } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:39 # User : geovindu # Product : GoLand # Project : godesginpattern # File : order_service.go */ package service import ( godesginpattern/handshaking/domain godesginpattern/handshaking/enums godesginpattern/handshaking/repository ) type OrderService struct { Workshop *domain.JewelryWorkshop } func (s *OrderService) SubmitOrder(orderID string, jt enums.JewelryType, customer string) string { err : s.Workshop.AcceptOrder(orderID) if err ! nil { return ❌ 订单 orderID 被拒绝 err.Error() } repository.SaveOrder(repository.Order{ OrderID: orderID, JewelryType: jt, Customer: customer, Status: enums.PRODUCING, }) return ✅ 订单 orderID 已接受 } func (s *OrderService) CompleteOrder(orderID string) string { err : s.Workshop.CompleteOrder(orderID) if err ! nil { return ⚠️ err.Error() } repository.UpdateStatus(orderID, enums.COMPLETED) return 订单 orderID 加工完成 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:40 # User : geovindu # Product : GoLand # Project : godesginpattern # File : material_service.go */ package service type MaterialService struct{} func (m *MaterialService) UseMaterial(orderID string, material string) string { return 订单 orderID 使用原料 material } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Handshaking 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/7/1 21:41 # User : geovindu # Product : GoLand # Project : godesginpattern # File : workshop_api.go */ package api import ( godesginpattern/handshaking/config godesginpattern/handshaking/domain godesginpattern/handshaking/enums godesginpattern/handshaking/service ) type WorkshopAPI struct { OrderSvc *service.OrderService MaterialSvc *service.MaterialService QCSvc *service.QCService Finance *service.FinanceService } func NewAPI() *WorkshopAPI { // 配置仅在应用入口传入domain 无感知 workshop : domain.NewWorkshop(config.WorkshopMaxLoad) return WorkshopAPI{ OrderSvc: service.OrderService{Workshop: workshop}, MaterialSvc: service.MaterialService{}, QCSvc: service.QCService{}, Finance: service.FinanceService{}, } } func (api *WorkshopAPI) SubmitOrder(orderID string, jt enums.JewelryType, customer string) string { return api.OrderSvc.SubmitOrder(orderID, jt, customer) } func (api *WorkshopAPI) CompleteOrder(orderID string) string { return api.OrderSvc.CompleteOrder(orderID) } func (api *WorkshopAPI) UseMaterial(orderID string, material string) string { return api.MaterialSvc.UseMaterial(orderID, material) } func (api *WorkshopAPI) QC(orderID string) string { return api.QCSvc.Pass(orderID) } func (api *WorkshopAPI) Settle(orderID string) string { return api.Finance.Settle(orderID) }调用/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 # 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/7/1 21:43 # User : geovindu # Product : GoLand # Project : godesginpattern # File : handshakingbll.go */ package bll import ( godesginpattern/handshaking/api godesginpattern/handshaking/enums ) func HandshakingMain() { println( 珠宝企业级系统启动握手模式\n) api : api.NewAPI() orders : []struct { orderID string jt enums.JewelryType customer string }{ {ORD001, enums.DIAMOND_RING, 张先生}, {ORD002, enums.GOLD_BRACELET, 李女士}, {ORD003, enums.JADE_PENDANT, 王小姐}, {ORD004, enums.RUBY_NECKLACE, 刘先生}, {ORD005, enums.PLATINUM_RING, 陈女士}, {ORD006, enums.SAPPHIRE_EARRING, 赵先生}, {ORD007, enums.PEARL_NECKLACE, 孙女士}, } println(----- 接收客户订单 -----) for _, o : range orders { println(api.SubmitOrder(o.orderID, o.jt, o.customer)) } println(\n----- 完成2个订单 -----) println(api.CompleteOrder(ORD001)) println(api.CompleteOrder(ORD002)) println(\n----- 重新接收被拒订单 -----) println(api.SubmitOrder(ORD006, enums.SAPPHIRE_EARRING, 赵先生)) println(api.SubmitOrder(ORD007, enums.PEARL_NECKLACE, 孙女士)) println(\n----- 原料使用 -----) println(api.UseMaterial(ORD001, 18K黄金 钻石)) println(\n----- 质检 -----) println(api.QC(ORD001)) println(\n----- 财务结算 -----) println(api.Settle(ORD001)) }输出