抖音服务器

服务器demo

测试路由

  1. 浏览器url输入不能测试POST请求!!!看清楚是get请求再测

login:1 GET http://127.0.0.1:8080/douyin/user/login 404 (Not Found)

  1. 修改完代码要马上重启服务
  2. 这是一个结构体(go里省略分号),Response(这也是结构体,里面有StatusCode,StatusMsg),一部分是自定义数据
type TestResponse struct { //Response(里面有StatusCode,StatusMsg)
   Response
   CommentList []Comment `json:"comment_list,omitempty"`
   User        User      `json:"user"`
   UserId      int64     `json:"user_id,omitempty"`
   Token       string    `json:"token"`
   TestCode    int8      `json:"test_code"`
}
  1. 在 Golang 的结构体定义中添加 omitempty 关键字,来表示这条信息如果没有提供,在序列化成 json 的时候就不要包含其默认值。(问题:内嵌结构体依然会显示;初始值等于默认值会隐藏。解决方法:改成指针)

https://www.jianshu.com/p/a2ed0d23d1b0

  1. 为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明(json:"test_code"),这样无论代码中的变量如何改变,我们都能成功将 json 数据解析出来。
    6.连接MySQL
    Go中文文档
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
db, err := sqlx.Connect("mysql", "root:root@(localhost:3306)/mydb")
if err != nil {
   fmt.Printf("connect DataBase failed, err:%v\n", err)
   return
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
fmt.Printf("connect DataBase success\n")

字节上课案例

import (
   "database/sql"
   "fmt"
   "github.com/gin-gonic/gin"
   _ "github.com/go-sql-driver/mysql"
   "github.com/jmoiron/sqlx"
   "net/http"
)
func TestPOST(c *gin.Context) {
   db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/mydb")
   //username := "hcl"
   username, _ := c.GetPostForm("username")
   password, _ := c.GetPostForm("password")
   rows, err := db.Query("select * from user where username=? and password = ?", username, password)
   if err != nil {
      fmt.Println(err)
   }
   defer rows.Close()
   var users []Users
   for rows.Next() {
      var user Users
      err := rows.Scan(&user.Username, &user.Password)
      if err != nil {
         fmt.Println(err)
      }
      users = append(users, user)
   }
   fmt.Printf("%v", users)
   if rows.Err() != nil {
      fmt.Println(rows.Err())
   }
   c.JSON(http.StatusOK, TestDBResponse{
      Response: Response{StatusCode: 0, StatusMsg: "TestDB成功"},
      Users:    users,
   })
}

Gorm默认表名复数

表名,列名如何对应结构体

在Gorm中,表名是结构体名的复数形式,列名是字段名的蛇形小写。

即,如果有一个user表,那么如果你定义的结构体名为:User,gorm会默认表名为users而不是user。

db.SingularTable(true) // 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响

这样的话,表名默认即为结构体的首字母小写形式。

mysql语句
create table student(id varchar(20),name varchar(20));
insert into student (id,name) values("1","hcl");
select *from student
alter table student rename to students;
type Student struct {
   Id   string
   Name string
}
func TestGorm(c *gin.Context) { //"gorm.io/driver/mysql"
   fmt.Println("TestGorm函数:")
   db, err := gorm.Open(
      mysql.Open("root:root@tcp(127.0.0.1:3306)/mydb"),
   )
   if err != nil {
      fmt.Println(err)
   }
  // db.SingularTable(true)用了这个数据库用Student
   var student Student
   db.First(&student, 1) // 根据整型主键查找
   //err = db.Select("id", "name").Find(&student, "1").Error
   c.JSON(http.StatusOK, TestDBResponse{
      Response: Response{StatusCode: 0, StatusMsg: "TestGorm成功"},
      Student:  student,
   })
}

image.png

登陆网络异常,解决跨域的中间件函数

https://copyfuture.com/blogs-details/20210730154453689A
https://blog.csdn.net/eiuly/article/details/17081657?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-17081657-blog-97032653.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-17081657-blog-97032653.pc_relevant_antiscanv2&utm_relevant_index=2

posted @ 2022-05-16 13:10  剩下的交给时间就好  阅读(282)  评论(0编辑  收藏  举报