惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern go: Fan-In Pattern python: Fan-In Pattern Fan-In go: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern python: Reactor Pattern go: Generators Pattern python: speech to text offline python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: Command Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
go: Handshaking Pattern
®Geovin Du Dream Park™ · 2026-07-01 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

57f7774b-b662-4acc-9781-26af17a9b5d8

/*
# 版权所有  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[i+1:]...)
			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"))
}

输出:

937d9bd85b02e522173a394ec6d2f044

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)