编程初学者的Go语言学习之旅 | 青训营笔记

88 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第11天。

前言

前文大致介绍了一下我实现用户登录接口服务实现的思路与方式,今天来简单说一下用户信息获取接口服务实现的方式。

主体思路

首先我们需要拿到被获取信息用户的Id,自己的token:代表你登陆了,也就是接口文档中的传入参数user_id``token,我们同样使用c.Query方法来提取传入参数以及生产存在布尔值:

user_id, user_idBool := c.GetQuery("user_id")
_, tokenBool := c.GetQuery("token")

值得注意的是,此处我们使用_来占位了传入参数token的实际值,为什么呢? 首先我们不需要使用到这个参数token,因为我们不止可以浏览自己的信息,还需可以获取其他人的信息,所以我们并不需要对这个token做具体的验证判定。由于go是一门强类型静态语言,所有声明定义过的变量均需被使用,所以我们使用_进行占位防止报错。

随后老规矩,进行一下传入参数判定:

if !user_idBool || !tokenBool {
  //返回失败响应
  return
}

接下来连接数据库,在数据库中查询传入的user_id是否存在,如果存在,返回用户的信息。同样的,我们链式使用Where方法与First方法,将返回值赋值给result变量,随后对result变量调用Error方法,创建失败分支:

if result.Error != nil {
   //返回失败响应
   return
}

如果没有进入以上两个分支,我们就需要返回成功响应,文档中返回响应其实是由两个结构体组成的:

type ApifoxModel struct {
	StatusCode int64   `json:"status_code"`// 状态码,0-成功,其他值-失败
	StatusMsg  *string `json:"status_msg"` // 返回状态描述
	User       *User   `json:"user"`       // 用户信息
}

// User
type User struct {
	FollowCount   int64  `json:"follow_count"`  // 关注总数
	FollowerCount int64  `json:"follower_count"`// 粉丝总数
	ID            int64  `json:"id"`            // 用户id
	IsFollow      bool   `json:"is_follow"`     // true-已关注,false-未关注
	Name          string `json:"name"`          // 用户名称
}

我们需要对这两个结构体进行传值,最后再用ApifoxModel结构体进行成功响应返回。

注册路由

此处的注册路由稍有特殊,可以看到官方文档给的路由是/douyin/user/,由于我们最开始的主路由组为douyin,其下的子路由组名为user,所以我们需要将用户信息获取接口的路由注册为/,并且为GET方法:

userGroup.GET("/", Service.Getinfo)

以上完成了用户信息获取服务的简单实现。