# douyin-try **Repository Path**: lyrLearning/douyin-try ## Basic Information - **Project Name**: douyin-try - **Description**: 自己独立写一下青训营douyin项目 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-30 - **Last Updated**: 2022-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # swagger 参考文档:https://wnanbei.github.io/post/gin-%E9%85%8D%E7%BD%AE-swagger-%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3/ ## 基本知识 每次更新swagger文档,我们需要:swag init 访问swagger文档地址:localhost:8080/swagger/index.html 访问"/swagger/doc.json",得到的是/docs/swagger.json文件信息 _ "com.lin/douyin-try/docs",main.go里面必须导入这个包 ## main.go里面标注的 //@title 文档标题
//@version 1.0 版本号1.0
//@description 文档描述
```go //改掉就相当于禁用了 url := ginSwagger.URL("/swagger/doc.json") ``` ![img.png](img.png) ![img_1.png](img_1.png) ![img_2.png](img_2.png) ## 注释外部访问接口 ![img_3.png](img_3.png) ## 杂记 1. 全局变量名不能与type struct 名称{}的这个名同名,但在函数里面是可以的,方法是特殊的函数。 2. 使用gorm开启事务之后,就不要使用它获取原生的sql.DB了,因为这样它们的事务是不同步的。 3. 更新操作,存在表达式怎么办呢?db.Model(&product).Update("price", gorm.Expr("price * ? + ?", 2, 100)) 4. 我们开启事务之后,假如叫tx,这个变量是会发生改变的,所以使用之后要加tx = tx.(XXXX) 5. 开启一个事务之后,一开始Creat存在条件,后面我们就行使用到条件,会把前面的条件继续拼接上去 ## gorm 使用gorm一圈下来啊,发现当我吐槽官方文档傻逼的时候,认为官方文档的例子傻逼的时候,我都会在模范官方的例子中解决问题。 关于事务的问题:手动开关事务的过程中,我们需要注意的是,当我们执行了一个sql之后,tx变量会发生改变的, 这个时候如果我们让 tx = tx.XXX 的话,那完了,回不去原来的tx了。 正确的做法是,执行完之后,我们直接.里面的 `Error` ,没报错就通过,或者使用一个临时变量保存起来 然后接下来的事务继续使用一开始开事务的那个就行了,如果不这样的话,就会出现前面的条件又拼接到现在的sql上面了。 我们需要加过滤条件的时候,先`where`然后再搞后面的。 ```go var users []respMsg.UserMsg err := model.DB.Table( "follow", ).Select( "user.id, user.nickname, user.follow_count, user.follower_count", ).Joins( "JOIN `user` ON user.`id` = follow.`follow_id`", ).Where("follow.`follower_id` = ?", userId).Find(&users).Error return users, err ``` 直接写表名的话,无法拼接逻辑删除字段进行的。 解决方法:1、使用`.Model()`来确定;2、再where后面加上 `and deleted_at IS NULL` 就行了 想要gorm每次执行都能看到日志,就在创建gorm的DB的时候,加上Logger,并且配上info的日志级别 ```go db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ //为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除) SkipDefaultTransaction: true, //PreparedStmt 在执行任何SQL时都会创建一个prepared statement并将其缓存,以提高后续的效率 PrepareStmt: true, //缓存预编译语句 Logger: logger.Default.LogMode(logger.Info), }) ``` ## 跑起我们的抖声项目 首先,我们使用模拟器安装这个`.apk`文件 然后,打开该app双击我的,填写本地主机的IPV4地址(在cmd中输入ipconfig可查看) 最后,就可以进行测试了。