go item


strings.Join/Split

Images := strings.Join(req.Images, ","),
articleTagIDs := strings.Split(articleNew.TagIDs, ",")

注:
tmp := ""
tmparr := strings.Split(tmp, ",")
for _, item := range tmparr {
	print("[" + item + "]")
}
//输出[]

注:
//空string split出来成了[""]
if a.Images != "" {
	meta.Images = strings.Split(a.Images, ",")
} else {
	meta.Images = []string{}
}

 


返回错误:fmt.Errorf("returnCode %v message %v", res.ReturnCode, res.Message)


c.JSON(http.StatusOK, gin.H{"result": true})


func GetPager(c *gin.Context) (offset int, limit int, err error) {
    offset, err = strconv.Atoi(c.Query(consts.OffsetInQuery))
    limit, err = strconv.Atoi(c.Query(consts.LimitInQuery))
    if offset < 0 {
        offset = 0
    }
    if limit <= 0 {
        limit = consts.PageLimit
    }
    return offset, limit, err
}


必填字段
Mobile        string `json:"mobile" binding:"required"`


gin.H

c.JSON(http.StatusOK, response.Ok(gin.H{"items": medals, "total": total}))


不要前端筛数据,10条筛成0条的话,导致不断加载...


在service层里两次到dao层db的列表时,前半段数据只访问一个dao层即可,当需要后面的数据时因为页数要求需要访问两个dao层
### 此方法需要增加可读性 可维护性  每个if要分出来
func (s *articleMysqlStore) GetTagListForUser(req *request.TagListForUserReq) ([]*model.Tag, int, error) {
    tags := make([]*model.Tag, 0)
    db := s.db.Table("tag")
    db = db.Joins("left join plate_tag ON plate_tag.tag_id = tag.id")
    if req.PlateID != "" {
        db = db.Where("plate_tag.plate_id = ?", commonUtils.IDToSN(req.PlateID))
    }
    if req.Keyword != "" {
        db = db.Where("tag.title like '%" + req.Keyword + "%' or tag.alias like '%" + req.Keyword + "%'")
    }
    if req.NotIncludePlateID != "" {
        db = db.Where("plate_tag.plate_id <> ?", commonUtils.IDToSN(req.NotIncludePlateID))
    }
    var total int
    db.Count(&total)
    db = db.Select("*")
    if req.SortBy != 0 {
        if req.OrderBy == 0 {
            db = db.Order("article_count")
        } else {
            db = db.Order("article_count desc")
        }
    }
    if req.Limit != 0 {
        db = db.Limit(req.Limit)
    } else {
        db = db.Limit(20)
    }
    if req.Offset != 0 {
        db = db.Offset(req.Offset)
    }
    db = db.Group("tag.id")
    err := db.Scan(&tags).Error
    if err != nil {
        return nil, total, err
    }
    return tags, total, err
}


当需要拼接其他数据时,为了效率可以先取出全部的数据放到map,然后再在内存中选取:
plateMap := make(map[string]*plate.ResponsePlateMainDataResp, 0)
for _, plateItem := range plates {
    plateCurrent := plateItem
    plateMap[*plateCurrent.Id] = &plateCurrent
}


map查找、类型断言、通道接收:
v, ok = m[key] // map lookup
v, ok = x.(T)  // type assertion
v, ok = <-ch   // channel receive
 
也可以返回一个值:
v = m[key] // map查找,失败时返回零值
v = x.(T) // type断言,失败时panic异常
v = <-ch // 管道接收,失败时返回零值(阻塞不算是失败)

 golang的格式化工具:

golang.org/x/tools/cmd/goimports导入工具,它可以根 据需要自动添加或删除导入的包;许多编辑器都可以集成goimports工具,然后在保存文件的 时候自动运行。类似的还有gofmt工具,可以用来格式化Go源文件。


time:
    time.After(10 * time.Second)  //10秒后
    time.NewTicker(time.Minute * 30)  //每隔30分钟

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值