- 这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
1. 项目开发体验
这两天写了个登录注册接口,这两块感觉难度还不是很大,主要就是token的生成这一块需要用到第三方的库,然后需要自己定义token生成和解析的函数,token生成的话除了标准的claims以外还可以加入一些其它东西比如说username或者是userId之类的,但是不要存放敏感信息。然后就是需要自己定义中间件,在router中将中间件注册到想要被拦截的接口,比如说查看用户信息,点赞关注这一类的操作就需要登录(需要token),但是刷视频就不需要登录(不需要token)。然后就是用户头像和背景图这一块还是查了很久的资料,一开始以为是图片的在服务器上的相对路径,失败了几次后才意识到这个avatar的string类型指的不是url,而是将图片通过某种编码方式转换成了字符串,所以就查了一些资料,发现比较常用的base64可以将[]byte转换成string,当然前提是要读取这个文件成为流,这样做的好处是直接将图片流内嵌到了代码中,在图片数量很多的情况下可以减少网络流量消耗
但是尴尬的事情发生了,之前数据库定义的varchar(255)完全不够用,把数字换大了一点发现还是一样太长了根本存不下,后来百度了一下发现要换成text这类的才行,但是问题又来饿了,清晰度太高的图片base64编码后字符串太长了,远超出了mysql一列所能容纳的范围,所以不得已降低了一下清晰度,这个目前还没有想到有什么好的解决办法,不过降低清晰度减小字符串的长度还是可取的,下面附上代码:
// 1. avatar
bufferAvatar, _ := ioutil.ReadFile("public/default_avatar.jpg")
avatarString := base64.StdEncoding.EncodeToString(bufferAvatar)
// 2. background_image
bufferBackground, _ := ioutil.ReadFile("public/default_background.jpg")
backgroundString := base64.StdEncoding.EncodeToString(bufferBackground)
有个小问题就是这个ReadFile方法已经过期了,暂时也不知道有没有什么更好的办法可以解决。
2. 遇到的第一个坑
关于feed视频流,不知道什么原因查出来的用户id和视频id全部是0,就很奇怪,对gorm本身不是很熟,所以也不知道结构体嵌套查询的时候是如何进行字段赋值的,而且这个内嵌的结构体和外面的结构体本身还有重复的字段emmm...截止本文发出去之前我是没有找到什么好的解决方案,就一直卡bug卡在这了,唉,希望能早点找到解决的办法吧