Go 优雅的构建映射关系


此方法适用于下列场景:业务开发时时常有不同场景的数据需要进行变换,因此我们会选择使用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  
}


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录