golang 内部函数 例

funcUserInfo := func(userIdArr []int) (map[int]*user.ModelUserResp, error) {
	sort.Ints(userIdArr)
	userIdArrUnDuplicates := make([]int32, 0)
	for i := 0; i < len(userIdArr); i++ {
		if i > 0 && userIdArr[i-1] == userIdArr[i] {
			continue
		}
		userIdArrUnDuplicates = append(userIdArrUnDuplicates, int32(userIdArr[i]))
	}
	userApi := client.NewUserAPI()
	usersReq := user.ModelUserIDs{
		UserIDs: userIdArrUnDuplicates,
	}
	usersRes := make([]user.ModelUserResp, 0)
	usersRes, _, err = userApi.UsersInfoInternal(context.TODO(), usersReq)
	if err != nil {
		logrus.Errorf("user server error: %v", err)
	}
	userMap := make(map[int]*user.ModelUserResp)
	for _, v := range usersRes {
		v2 := v
		userMap[int(*v.Id)] = &v2
	}
	return userMap, nil
}

userMap, _ := funcUserInfo(userIdArr)
	splitfunc := func(req string) []string {
		if req == "" {
			return make([]string, 0)
		} else {
			return strings.Split(req, ",")
		}
	}

	for _, champion := range champions {
		championRes := &ChampionRes{
			GameID:       champion.GameID,
			Version:      champion.Version,
			VersionName:  champion.VersionName,
			ChampionNO:   champion.ChampionNO,
			VersionID:    champion.VersionID,
			Title:        champion.Title,
			Name:         champion.Name,
			Abbr:         champion.Abbr,
			Alias:        splitfunc(champion.Alias),
			Img:          champion.Img,
			Origin:       champion.Origin,
			Class:        champion.Class,
			Cost:         champion.Cost,
			Health:       splitfunc(champion.Health),
			Armor:        splitfunc(champion.Armor),
			Mr:           splitfunc(champion.Mr),
			Damage:       splitfunc(champion.Damage),
			AtkSpd:       splitfunc(champion.AtkSpd),
			CritRate:     splitfunc(champion.CritRate),
			Range_:       splitfunc(champion.Range_),
			StartingMana: splitfunc(champion.StartingMana),
			Mana:         splitfunc(champion.Mana),
			PhysDmg:      splitfunc(champion.PhysDmg),
			MagicDmg:     splitfunc(champion.MagicDmg),
			PhysDef:      splitfunc(champion.PhysDef),
			MagicDef:     splitfunc(champion.MagicDef),
			PlaDam:       splitfunc(champion.PlaDam),
			Items:        splitfunc(champion.Items),
			SkillNO:      champion.SkillNO,
		}
		championsRess = append(championsRess, championRes)
	}

区分

func (this *CronManager) wrap(name string, f func() error) func() {  //就是返回一个函数
	return func() {
		defer func() {
			if err := recover(); err != nil {
				logger.Error("cronjob %s panic: %v, %s", name, err, debug.Stack())
			}
		}()
		err := f()  //看起来好别扭
		if err != nil {
			logger.Error("cronjob %s error: %s", name, err.Error())
		}
	}
}

内部函数传参

		go func(j int) {
			oneClient := dcipayConnPool.Get()
			req := &Test{
				Code: "req",
				Msg:  "tom" + strconv.Itoa(j),
			}
			resp := &Test{}
			err := oneClient.Call(context.Background(), "Echo", req, resp)
			if err != nil {
				log.Errorf("error: %s", err)
			} else {
				log.Infof("resp: %v", resp)
			}
			wg.Done()
		}(i)  // ##########

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值