项目结构:

结构化优势
分层明确:实体、供应商、适配器、业务完全分离
职责单一:每个文件只做一件事
易扩展:新增供应商 C,只需增加:
adaptee/supplier_c.go
adapter/supplier_c_adapter.go
业务零改动:service/business.go 永远不需要修改
符合设计模式最佳实践
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:55
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : jewelry.go
*/
package entity// StandardJewelry 业务系统统一标准接口
type StandardJewelry interface {GetName() stringGetWeight() float64GetMaterial() stringGetCost() float64
}// JewelryEntity 标准数据实体
type JewelryEntity struct {Name stringWeight float64Material stringCost float64
}func (j *JewelryEntity) GetName() string { return j.Name }func (j *JewelryEntity) GetWeight() float64 { return j.Weight }func (j *JewelryEntity) GetMaterial() string { return j.Material }func (j *JewelryEntity) GetCost() float64 { return j.Cost }
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_a.go
*/
package adaptee// SupplierA 传统中文Map格式
type SupplierA struct {Data map[string]interface{}
}/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_b.go
*/
package adaptee// SupplierB 国际英文结构体
type SupplierB struct {Name stringCarat float64Material stringPrice float64
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_a_adapter.go
*/
package adapterimport ("godesginpattern/adapter/adaptee""godesginpattern/adapter/entity"
)// SupplierAAdapter 适配A → 标准接口
type SupplierAAdapter struct {supplier *adaptee.SupplierA
}func NewSupplierAAdapter(s *adaptee.SupplierA) entity.StandardJewelry {return &SupplierAAdapter{supplier: s}
}func (a *SupplierAAdapter) GetName() string {return a.supplier.Data["名称"].(string)
}// 克重 → 统一转 float64(支持 int / float64)
func (a *SupplierAAdapter) GetWeight() float64 {switch val := a.supplier.Data["克重"].(type) {case int:return float64(val)case float64:return valdefault:return 0}
}func (a *SupplierAAdapter) GetMaterial() string {return a.supplier.Data["材质"].(string)
}// 供货价 → 统一转 float64(支持 int / float64)
// 这里修复了 panic 问题!
func (a *SupplierAAdapter) GetCost() float64 {switch val := a.supplier.Data["供货价"].(type) {case int:return float64(val)case float64:return valdefault:return 0}
}/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:57
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_b_adapter.go
*/
package adapterimport ("godesginpattern/adapter/adaptee""godesginpattern/adapter/entity"
)// SupplierBAdapter 适配B → 标准接口
type SupplierBAdapter struct {supplier *adaptee.SupplierB
}func NewSupplierBAdapter(s *adaptee.SupplierB) entity.StandardJewelry {return &SupplierBAdapter{supplier: s}
}func (b *SupplierBAdapter) GetName() string { return b.supplier.Name }
func (b *SupplierBAdapter) GetWeight() float64 { return b.supplier.Carat }
func (b *SupplierBAdapter) GetMaterial() string { return b.supplier.Material }
func (b *SupplierBAdapter) GetCost() float64 { return b.supplier.Price }
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 20:57
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : business.go
*/
package serviceimport ("fmt""godesginpattern/adapter/entity"
)// BusinessProcess 统一业务流程
func BusinessProcess(j entity.StandardJewelry) {fmt.Println("=== 执行业务流程 ===")fmt.Printf("商品:%s\n", j.GetName())fmt.Printf("重量:%.2f\n", j.GetWeight())fmt.Printf("材质:%s\n", j.GetMaterial())fmt.Printf("成本:%.2f\n", j.GetCost())fmt.Println("入库、计价、下单完成 ✅\n")
}
调用:
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter 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/4/18 21:02
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : adapterbll.goadapter/
├── go.mod // Go 模块
├── entity/ // 统一标准实体层
│ └── jewelry.go // 标准接口 + 标准实体
├── adaptee/ // 被适配者(供应商原始接口)
│ ├── supplier_a.go // 供应商A(中文Map)
│ └── supplier_b.go // 供应商B(英文结构体)
├── adapter/ // 适配器层(核心转换)
│ ├── supplier_a_adapter.go
│ └── supplier_b_adapter.go
├── service/ // 业务逻辑层
│ └── business.go
└── main.go // 程序入口
*/
package bllimport ("godesginpattern/adapter/adaptee""godesginpattern/adapter/adapter""godesginpattern/adapter/service"
)// 示例
func AdapterMain() {// 对接供应商AsuppA := &adaptee.SupplierA{Data: map[string]interface{}{"名称": "黄金项链","克重": 5.2,"材质": "足金","供货价": 2800,},}adapterA := adapter.NewSupplierAAdapter(suppA)service.BusinessProcess(adapterA)// 对接供应商BsuppB := &adaptee.SupplierB{Name: "Diamond Ring",Carat: 0.5,Material: "Platinum",Price: 12000,}adapterB := adapter.NewSupplierBAdapter(suppB)service.BusinessProcess(adapterB)
}
输出:

