抖音服务器
服务器demo
测试路由
- 浏览器url输入不能测试POST请求!!!看清楚是get请求再测
login:1 GET http://127.0.0.1:8080/douyin/user/login 404 (Not Found)
- 修改完代码要马上重启服务
- 这是一个结构体(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"`
}
- 在 Golang 的结构体定义中添加
omitempty
关键字,来表示这条信息如果没有提供,在序列化成 json 的时候就不要包含其默认值。(问题:内嵌结构体依然会显示;初始值等于默认值会隐藏。解决方法:改成指针)
- 为了将代码中的结构体与 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,
})
}
登陆网络异常,解决跨域的中间件函数
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