此方法适用于下列场景:业务开发时时常有不同场景的数据需要进行变换,因此我们会选择使用Map 来去进行关系映射,但是使用哪个 Map 对于定义者可能不成问题,但是对于使用者(通常是多人开发)就会有理解上的成本,因此我们使用下列写法对 Map 进行一层封装,使得其于转换对象强关联,使用者只要知道我是要从 A 类型转向 B类型即可,而且这种方法对 IDE 用户特别友好,只要使用.
就可以快捷的发现相关函数
package main
import "fmt"
// BizID 表示业务层面的整数类型
type BizID int
// ProductID 表示产品层面的整数类型
type ProductID int
var (
bizIDToProductID = make(map[BizID]ProductID)
productIDToBizID = make(map[ProductID]BizID)
)
// ToProductID 将业务 ID 转换为产品 ID// 如果映射表中存在对应关系,则返回产品 ID;否则返回错误
func (id BizID) ToProductID() (ProductID, error) {
productID, ok := bizIDToProductID[id]
if !ok {
return 0, fmt.Errorf("no mapping found for BizID %d", id)
}
return productID, nil
}
// ToBizID 将产品 ID 转换为业务 ID// 如果映射表中存在对应关系,则返回业务 ID;否则返回错误
func (id ProductID) ToBizID() (BizID, error) {
bizID, ok := productIDToBizID[id]
if !ok {
return 0, fmt.Errorf("no mapping found for ProductID %d", id)
}
return bizID, nil
}