go: Futures & Promises Pattern

项目结构:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:47
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : logger.go
*/
package utils
 
import (
    "log"
    "os"
    "time"
)
 
type Logger struct {
    inner *log.Logger
}
 
func NewLogger(name string) *Logger {
    l := &Logger{
        inner: log.New(os.Stdout, "", 0),
    }
    return l
}
 
func (l *Logger) Info(msg string) {
    now := time.Now().Format("2006-01-02 15:04:05")
    l.inner.Printf("[%s] INFO %s\n", now, msg)
}
 
 
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:47
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : order_state.go
*/
package core
 
// 订单状态枚举
type OrderState string
 
const (
    StateCreated       OrderState = "已创建"
    StatePurchasing    OrderState = "采购中"
    StatePurchased     OrderState = "采购完成"
    StateDesigning     OrderState = "设计中"
    StateDesigned      OrderState = "设计完成"
    StateManufacturing OrderState = "加工中"
    StateManufactured  OrderState = "加工完成"
    StateQualityCheck  OrderState = "质检中"
    StateQualified     OrderState = "质检通过"
    StateStoring       OrderState = "入库中"
    StateCompleted     OrderState = "全部完成"
    StateFailed        OrderState = "执行失败"
)
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:48
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : base_task.go
*/
package core
 
// 任务抽象接口 Promise 契约
// ITask 所有工序任务统一接口(对应Python ITask Promise)
type ITask interface {
    Execute(args ...interface{}) (interface{}, error)
    GetName() string
}
  
Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:50
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : purchase_task.go
*/
package tasks
 
import (
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
    "time"
)
 
// 采购任务
type PurchaseTask struct {
    logger *utils.Logger
}
 
func NewPurchaseTask() core.ITask {
    return &PurchaseTask{
        logger: utils.NewLogger("PurchaseTask"),
    }
}
 
func (p *PurchaseTask) Execute(args ...interface{}) (interface{}, error) {
    p.logger.Info("开始采购 1克拉 GIA 裸石...")
    time.Sleep(2 * time.Second)
    res := "1克拉GIA裸石"
    p.logger.Info("采购完成:" + res)
    return res, nil
}
 
func (p *PurchaseTask) GetName() string {
    return "采购任务"
}
 
 
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:50
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : design_task.go
*/
package tasks
 
import (
    "fmt"
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
    "time"
)
 
// 设计任务
type DesignTask struct {
    logger *utils.Logger
}
 
func NewDesignTask() core.ITask {
    return &DesignTask{
        logger: utils.NewLogger("DesignTask"),
    }
}
 
func (d *DesignTask) Execute(args ...interface{}) (interface{}, error) {
    stone := args[0].(string)
    d.logger.Info(fmt.Sprintf("根据裸石【%s】开始3D设计...", stone))
    time.Sleep(1 * time.Second)
    res := "钻戒3D设计图纸"
    d.logger.Info("设计完成:" + res)
    return res, nil
}
 
func (d *DesignTask) GetName() string {
    return "设计任务"
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:51
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : manufacture_task.go
*/
package tasks
 
import (
    "fmt"
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
    "time"
)
 
// 加工任务
type ManufactureTask struct {
    logger *utils.Logger
}
 
func NewManufactureTask() core.ITask {
    return &ManufactureTask{
        logger: utils.NewLogger("ManufactureTask"),
    }
}
 
func (m *ManufactureTask) Execute(args ...interface{}) (interface{}, error) {
    stone := args[0].(string)
    design := args[1].(string)
    m.logger.Info(fmt.Sprintf("加工:%s + %s", stone, design))
    time.Sleep(3 * time.Second)
    res := "1克拉定制钻戒成品"
    m.logger.Info("加工完成:" + res)
    return res, nil
}
 
func (m *ManufactureTask) GetName() string {
    return "加工任务"
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:52
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : quality_task.go
*/
package tasks
 
import (
    "fmt"
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
    "time"
)
 
// 质检任务
type QualityCheckTask struct {
    logger *utils.Logger
}
 
func NewQualityCheckTask() core.ITask {
    return &QualityCheckTask{
        logger: utils.NewLogger("QualityTask"),
    }
}
 
func (q *QualityCheckTask) Execute(args ...interface{}) (interface{}, error) {
    product := args[0].(string)
    q.logger.Info(fmt.Sprintf("质检:%s", product))
    time.Sleep(1 * time.Second)
    q.logger.Info("质检通过")
    return product, nil
}
 
func (q *QualityCheckTask) GetName() string {
    return "质检任务"
}
 
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:52
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : storage_task.go
*/
package tasks
 
import (
    "fmt"
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
    "time"
)
 
// 入库任务
type StorageTask struct {
    logger *utils.Logger
}
 
func NewStorageTask() core.ITask {
    return &StorageTask{
        logger: utils.NewLogger("StorageTask"),
    }
}
 
func (s *StorageTask) Execute(args ...interface{}) (interface{}, error) {
    product := args[0].(string)
    s.logger.Info(fmt.Sprintf("入库:%s", product))
    time.Sleep(1 * time.Second)
    res := fmt.Sprintf("可销售:%s", product)
    s.logger.Info("入库完成:" + res)
    return res, nil
}
 
func (s *StorageTask) GetName() string {
    return "入库任务"
}
 
 
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:53
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : process_service.go
*/
package service
 
import (
    "fmt"
    "godesginpattern/futurespromises/core"
    "godesginpattern/futurespromises/utils"
)
 
// 流程调度服务(核心 Future/Promise 链式执行)
type JewelryProcessService struct {
    logger *utils.Logger
    state  core.OrderState
}
 
func NewJewelryProcessService() *JewelryProcessService {
    svc := &JewelryProcessService{
        logger: utils.NewLogger("ProcessService"),
        state:  core.StateCreated,
    }
    svc.logger.Info(fmt.Sprintf("订单已创建 | 状态:%s", svc.state))
    return svc
}
 
func (s *JewelryProcessService) updateState(newState core.OrderState) {
    s.state = newState
    s.logger.Info(fmt.Sprintf("状态更新 → %s", newState))
}
 
// StartFullProcess 链式异步执行所有工序,模拟Future占位符流程
func (s *JewelryProcessService) StartFullProcess(
    purchase, design, manufacture, quality, storage core.ITask,
) (string, error) {
    // 1.采购
    s.updateState(core.StatePurchasing)
    stone, _ := purchase.Execute()
    s.updateState(core.StatePurchased)
 
    // 2.设计
    s.updateState(core.StateDesigning)
    designDoc, _ := design.Execute(stone)
    s.updateState(core.StateDesigned)
 
    // 3.加工
    s.updateState(core.StateManufacturing)
    product, _ := manufacture.Execute(stone, designDoc)
    s.updateState(core.StateManufactured)
 
    // 4.质检
    s.updateState(core.StateQualityCheck)
    qualified, _ := quality.Execute(product)
    s.updateState(core.StateQualified)
 
    // 5.入库
    s.updateState(core.StateStoring)
    finalRaw, _ := storage.Execute(qualified)
    s.updateState(core.StateCompleted)
 
    return finalRaw.(string), nil
}

调用:

Go 复制代码
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/23 20:54
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : futurespromisesbll.go
*/
package bll
 
import (
    "fmt"
    "godesginpattern/futurespromises/service"
    "godesginpattern/futurespromises/tasks"
    "time"
)
 
func demo() {
    // 实例化所有Promise任务
    purchase := tasks.NewPurchaseTask()
    design := tasks.NewDesignTask()
    manufacture := tasks.NewManufactureTask()
    quality := tasks.NewQualityCheckTask()
    storage := tasks.NewStorageTask()
 
    // 流程调度服务
    process := service.NewJewelryProcessService()
 
    // 启动全流程链式Future执行
    finalResult, err := process.StartFullProcess(purchase, design, manufacture, quality, storage)
    if err != nil {
        fmt.Println("流程执行失败:", err)
        return
    }
 
    // 等待5秒,保证最后日志完整输出,避免穿插输入框
    fmt.Println("\n⏳ 等待5秒,收集完整流程日志...")
    time.Sleep(5 * time.Second)
 
    fmt.Println("\n" + "============================================================")
    fmt.Printf("✅ 订单最终交付:%s\n", finalResult)
    fmt.Println("============================================================")
}
 
func FuturesPromisesMain() {
    demo()
}
  

输出: