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

推荐订阅源

IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
L
LangChain Blog
M
MIT News - Artificial intelligence
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
P
Proofpoint News Feed
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
I
InfoQ
月光博客
月光博客
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
D
Docker
B
Blog

博客园 - ®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
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(涂聚文)