优化一下这段代码 data := make([]*TaipingMemberRsp, 0) dataMap, err := user.GetConstantsMap(cid, "card,sex,relation") if err != nil { return data, errors.New("获取常量信息失败") }
for _, m := range members {
// 只需要身份类类型或者类型为空的
if m.CardType != user.IdentityCardType && m.CardType != 0 {
continue
}
cardNo := ""
if m.CardType == 1 {
cardNo = str.MaskIDCard(m.CardNo)
} else {
cardNo = str.Mask(m.CardNo, 2, 2)
}
data = append(data, &TaipingMemberRsp{
MemberId: m.MemberId,
Name: m.TrueName,
CardType: dataMap.Card[cast.ToString(m.CardType)],
CardNumber: cardNo,
PhoneNumber: str.Mask(m.Mobile, 3, 4),
AccountRelation: dataMap.Relation[cast.ToString(m.AccountRelation)],
IsDefault: m.IsDefault,
VerifyFlag: m.VerifyFlag,
Sex: dataMap.Sex[cast.ToString(m.Sex)],
Age: common.GetAgeByBirthday(m.Birthday),
Status: 0,
OrderId: 0,
SocialSecurityLevel: 0,
优化代码的主要目标是提高可读性、减少冗余和提高性能。以下是对您提供的代码段的优化版本:
data := make([]*TaipingMemberRsp, 0)
dataMap, err := user.GetConstantsMap(cid, "card,sex,relation")
if err != nil {
return data, errors.New("获取常量信息失败")
}
for _, m := range members {
// 只需要身份类类型或者类型为空的
if m.CardType != user.IdentityCardType && m.CardType != 0 {
continue
}
// 根据卡类型掩码处理卡号
cardNo := maskCardNumber(m.CardType, m.CardNo)
// 创建 TaipingMemberRsp 对象并添加到数据切片中
data = append(data, &TaipingMemberRsp{
MemberId: m.MemberId,
Name: m.TrueName,
CardType: dataMap.Card[cast.ToString(m.CardType)],
CardNumber: cardNo,
PhoneNumber: str.Mask(m.Mobile, 3, 4),
AccountRelation: dataMap.Relation[cast.ToString(m.AccountRelation)],
IsDefault: m.IsDefault,
VerifyFlag: m.VerifyFlag,
Sex: dataMap.Sex[cast.ToString(m.Sex)],
Age: common.GetAgeByBirthday(m.Birthday),
Status: 0,
OrderId: 0,
SocialSecurityLevel: 0,
})
}
// 辅助函数:根据卡类型掩码处理卡号
func maskCardNumber(cardType int, cardNo string) string {
if cardType == 1 {
return str.MaskIDCard(cardNo)
}
return str.Mask(cardNo, 2, 2)
}
提取函数:将卡号掩码处理逻辑提取到一个单独的函数 maskCardNumber
中,增强了代码的可读性和可维护性。
减少重复代码:通过函数调用,避免了在主循环中重复的条件判断和逻辑。
注释:添加了注释以解释代码的意图,帮助其他开发者理解代码。
结构清晰:保持了代码的结构清晰,使得逻辑一目了然。
通过这些优化,代码的可读性和可维护性得到了提升,同时也保持了原有的功能。