优化代码以提高可读性和性能

使用 GPT-4o Mini 回答,作者 GPT4oMini.app

问题:

优化一下这段代码 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)
}

优化点说明:

  1. 提取函数:将卡号掩码处理逻辑提取到一个单独的函数 maskCardNumber 中,增强了代码的可读性和可维护性。

  2. 减少重复代码:通过函数调用,避免了在主循环中重复的条件判断和逻辑。

  3. 注释:添加了注释以解释代码的意图,帮助其他开发者理解代码。

  4. 结构清晰:保持了代码的结构清晰,使得逻辑一目了然。

通过这些优化,代码的可读性和可维护性得到了提升,同时也保持了原有的功能。