diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9a50a6e895e68e152f722fa4bcbd26b65f8084e --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://116.62.160.30:1234 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/GoWebExercise.iml b/.idea/excerise.iml similarity index 100% rename from .idea/GoWebExercise.iml rename to .idea/excerise.iml diff --git a/.idea/modules.xml b/.idea/modules.xml index f999f485bda390e94df70bd31e8f5c67b7587346..cd11378f0bf1dfe31247da8c91717573d8d91e73 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml deleted file mode 100644 index a9e8697315d361fa277e00267c5cab15e05fc8e5..0000000000000000000000000000000000000000 --- a/.idea/watcherTasks.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/BookManage/controller/book.go b/BookManage/controller/book.go deleted file mode 100644 index b0b429f8999796d838ce5b5212dc27b8f4e11327..0000000000000000000000000000000000000000 --- a/BookManage/controller/book.go +++ /dev/null @@ -1 +0,0 @@ -package controller diff --git a/BookManage/controller/user.go b/BookManage/controller/user.go deleted file mode 100644 index ab8a6e3bc58059cea8a723b070afd05bb41fcab6..0000000000000000000000000000000000000000 --- a/BookManage/controller/user.go +++ /dev/null @@ -1,72 +0,0 @@ -package controller - -import ( - sql "BookManage/dao/mysql" - "BookManage/model" - "fmt" - - "github.com/google/uuid" - - "github.com/gin-gonic/gin" -) - -// 注册 -func RegisterHandle(c *gin.Context) { - p := new(model.User) - //参数校验。绑定 - if err := c.ShouldBindJSON(p); err != nil { - c.JSON(400, gin.H{ - "err": err.Error(), - "msg": "注册失败", - }) - return - } - //入库:用户名和密码 - sql.DB.Create(&p) - fmt.Println("zhuce", p) - c.JSON(200, gin.H{ - "msg": "success", - }) -} - -// 登录 -func LoginHandle(c *gin.Context) { - p := new(model.User) - //参数校验 - if err := c.ShouldBindJSON(p); err != nil { - c.JSON(400, gin.H{ - "err": err.Error(), - "msg": "登录失败", - }) - return - } - - fmt.Println("denglu", p) - //判断用户的用户名和密码是否正确 - u := model.User{Username: p.Username, Password: p.Password} - - if rows := sql.DB.Where(&u).Row(); rows == nil { - c.JSON(403, gin.H{ - "msg": "密码错误", - }) - return - } - //if rows := sql.DB.Where(&u).RowsAffected; rows == 0 { - // c.JSON(403, gin.H{ - // "msg": "密码错误", - // }) - // return - //} - //uuid -- 随机生成一个字符串作为token - token := uuid.New().String() - - sql.DB.Model(u).Update("token", token) - c.JSON(200, gin.H{ - "msg": "登录成功", - "token": token, - }) - - //更新用户token --- (tokens 忘记加s了,怪不得更新没有显示) - sql.DB.Table("user").Model(&model.User{Username: p.Username, Password: p.Password}).Where("username = ?", p.Username).Update("tokens", token) - fmt.Println(p.Username, "更新成功") -} diff --git a/BookManage/dao/mysql/initsql.go b/BookManage/dao/mysql/initsql.go deleted file mode 100644 index d627686e79b73fce969be91b4ad2a977dcc169d3..0000000000000000000000000000000000000000 --- a/BookManage/dao/mysql/initsql.go +++ /dev/null @@ -1,36 +0,0 @@ -package sql - -import ( - "BookManage/model" - "fmt" - - booksql "gorm.io/driver/mysql" - "gorm.io/gorm" -) - -//booksql 是为防止命名重复,给驱动定义的别名 - -// DB 定义全局变量,用于连接数据库 -var DB *gorm.DB - -func InitMySQL() { - //1、连接数据库 - // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 - dsn := "root:root@tcp(116.62.160.30:1234)/BookManage?charset=utf8mb4&parseTime=True&loc=Local" - - db, err := gorm.Open(booksql.Open(dsn), &gorm.Config{}) - - if err != nil { - fmt.Println("数据库连接失败") - fmt.Println(err) - } - - DB = db - - //2、创建表 - if err := DB.AutoMigrate(model.Book{}, model.User{}); err != nil { - fmt.Println("数据表创建失败") - fmt.Println(err) - } - -} diff --git a/BookManage/go.mod b/BookManage/go.mod deleted file mode 100644 index 3b48af139e15c6c6813b7f7ce08a324bf300aae8..0000000000000000000000000000000000000000 --- a/BookManage/go.mod +++ /dev/null @@ -1,39 +0,0 @@ -module BookManage - -go 1.20 - -require ( - github.com/gin-gonic/gin v1.9.0 - gorm.io/driver/mysql v1.5.1 - gorm.io/gorm v1.25.1 -) - -require ( - github.com/bytedance/sonic v1.8.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect - github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.11.2 // indirect - github.com/go-sql-driver/mysql v1.7.0 // indirect - github.com/goccy/go-json v0.10.0 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.9 // indirect - golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect - golang.org/x/crypto v0.5.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/BookManage/main.go b/BookManage/main.go deleted file mode 100644 index 2c3adec376bf9444fb80dfcb3d23b18e7074f7f0..0000000000000000000000000000000000000000 --- a/BookManage/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - sql "BookManage/dao/mysql" - "BookManage/router" - - "github.com/gin-gonic/gin" -) - -func main() { - //初始化mysql - sql.InitMySQL() - - //r := gin.Default() - - r := router.InitRouter() - - r.GET("/", func(c *gin.Context) { - c.String(200, "hello") - }) - - r.Run(":10086") -} diff --git a/BookManage/model/BookUser.go b/BookManage/model/BookUser.go deleted file mode 100644 index 8aa98bfae21e0269604bae940bd63aba212423f7..0000000000000000000000000000000000000000 --- a/BookManage/model/BookUser.go +++ /dev/null @@ -1,9 +0,0 @@ -package model - -/* -* - */ -type BookUser struct { - UserID int32 `json:"user_id" gorm:"primary_key"` - BookID int32 `json:"book_id" gorm:"primary_key"` -} diff --git a/BookManage/model/book.go b/BookManage/model/book.go deleted file mode 100644 index d284d7ab94ffcc731ba2c4abc2bb9d3caa104025..0000000000000000000000000000000000000000 --- a/BookManage/model/book.go +++ /dev/null @@ -1,13 +0,0 @@ -package model - -type Book struct { - Id int32 `json:"id" gorm:"primary_key"` - BookName string `json:"name" gorm:"type:varchar(20);not null" binding:"required"` - //Author string `json:"author" gorm:"type:varchar(20);not null" binding:"required"` - Desc string `json:"desc"` - User []User `gorm:"many2many:book_users;"` -} - -func (Book) TableName() string { - return "book" -} diff --git a/BookManage/model/user.go b/BookManage/model/user.go deleted file mode 100644 index 2132d3fd20d34f416fc9b5daf80c2b07607bd695..0000000000000000000000000000000000000000 --- a/BookManage/model/user.go +++ /dev/null @@ -1,19 +0,0 @@ -package model - -/** -json:"id" 为了在返回json数据时,将id字段改为小写--反向解析的名字 -grom:"primary_key" 为了在数据库中,将id字段设置为主键 -gorm:"type:varchar(20);not null" 为了在数据库中,将username字段设置为varchar(20)类型,且不能为空 -binding:"required" 为了在绑定数据时,将username字段设置为必须的 -*/ - -type User struct { - Id int32 `json:"id" gorm:"primary_key"` - Username string `json:"username" gorm:"type:varchar(20);not null" binding:"required"` - Password string `json:"password" gorm:"type:varchar(20);not null" binding:"required"` - Tokens string `json:"token" ` -} - -func (User) TableName() string { - return "user" -} diff --git a/BookManage/router/api_router.go b/BookManage/router/api_router.go deleted file mode 100644 index 4c8b030d6e333a47fe03decacac58b456dbe73fc..0000000000000000000000000000000000000000 --- a/BookManage/router/api_router.go +++ /dev/null @@ -1,12 +0,0 @@ -package router - -import ( - "BookManage/controller" - - "github.com/gin-gonic/gin" -) - -func LoadAPIRouter(r *gin.Engine) { - r.POST("/register", controller.RegisterHandle) - r.POST("/login", controller.LoginHandle) -} diff --git a/BookManage/router/init_router.go b/BookManage/router/init_router.go deleted file mode 100644 index 904f14f616c7682fbfffb7742b023786cdeb91ba..0000000000000000000000000000000000000000 --- a/BookManage/router/init_router.go +++ /dev/null @@ -1,16 +0,0 @@ -package router - -import "github.com/gin-gonic/gin" - -/* - 加载其他路由文件中的路由 -*/ - -// 初始化其他文件中的路由 -func InitRouter() *gin.Engine { - //初始化Gin服务 - r := gin.Default() - LoadTestRouter(r) - LoadAPIRouter(r) - return r -} diff --git a/BookManage/router/test_router.go b/BookManage/router/test_router.go deleted file mode 100644 index 49b351162c9bda5d8493dbadb57cba1a0ce4e218..0000000000000000000000000000000000000000 --- a/BookManage/router/test_router.go +++ /dev/null @@ -1,9 +0,0 @@ -package router - -import "github.com/gin-gonic/gin" - -func LoadTestRouter(r *gin.Engine) { - r.GET("/test", func(c *gin.Context) { - c.String(200, "测试成功") - }) -} diff --git a/Gin/Gorm/test01/testsql01.go b/Gin/Gorm/test01/testsql01.go deleted file mode 100644 index 1cff779f380fe5054d0b3826d187a9e0149ad864..0000000000000000000000000000000000000000 --- a/Gin/Gorm/test01/testsql01.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "fmt" - "gorm.io/driver/mysql" - "gorm.io/gorm" -) - -type User struct { - Id uint `json:"id"` - Name string `json:"name"` - Age int64 `json:"age"` - Password string `json:"password"` -} - -// 3.1、定义模型 -type Player struct { - gorm.Model - ID uint `gorm:"primarykey" json:"id"` - Name string `json:"name"` - Age int64 `json:"age"` - Game string `json:"game"` -} - -func main() { - //1、连接数据库 - // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 - dsn := "root:root@tcp(116.62.160.30:1234)/GormTest?charset=utf8mb4&parseTime=True&loc=Local" - - //2、定义数据库连接池 - db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) - - if err != nil { - fmt.Println("数据库连接失败") - fmt.Println(err) - } - - fmt.Println("数据库连接成功") - - //var players []Player - var users []User - - //迁移,自动创建表 - //fmt.Println("表自动创建成功") - //db.AutoMigrate(Player{}) - - //db.Find(&players) - //fmt.Println("开始查询") - //for _, player := range players { - // fmt.Printf("ID: %d, Name: %s, Age: %d, Game: %s\n", player.ID, player.Name, player.Age, player.Game) - //} - //fmt.Println("查询结束") - - db.Table("user").Find(&users) - fmt.Println("开始查询") - for _, user := range users { - fmt.Printf("ID: %d, Name: %s, Age: %d, Password: %s\n", user.Id, user.Name, user.Age, user.Password) - } - fmt.Println("查询结束") - -} diff --git a/Gin/Gorm/test02/testsql02.go b/Gin/Gorm/test02/testsql02.go deleted file mode 100644 index 8b1319983ed8129fc405f6f5606c627d2029f66e..0000000000000000000000000000000000000000 --- a/Gin/Gorm/test02/testsql02.go +++ /dev/null @@ -1,85 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - - "gorm.io/driver/mysql" - "gorm.io/gorm" -) - -type Player struct { - ID uint `gorm:"primarykey" json:"id"` - Name string `json:"name"` - Age int64 `json:"age"` - GameID uint `json:"gameid" gorm:"column:gameid"` - Game Game `gorm:"foreignKey:GameID;references:ID"` -} - -type Game struct { - ID int `gorm:"column:gameid" json:"gameid"` - Name string `gorm:"column:game_name" json:"game_name"` -} - -// 3.1、定义模型对应的表名 -func (Game) TableName() string { - return "game" -} - -func main() { - //1、连接数据库 - // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 - dsn := "root:root@tcp(116.62.160.30:1234)/GormTest?charset=utf8mb4&parseTime=True&loc=Local" - - //2、定义数据库连接池 - db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) - - if err != nil { - fmt.Println("数据库连接失败") - fmt.Println(err) - } - - /** - Association 查询关联,两步查询,先查询主表Player,再查询关联表Game - */ - p := Player{} - db.Table("players").Find(&p) - fmt.Println("开始查询") - fmt.Printf("ID: %d, Name: %s, Age: %d, Game: %d\n", p.ID, p.Name, p.Age, p.GameID) - err = db.Model(&p).Table("game").Association("Game").Find(&p.Game) - if err != nil { - fmt.Println(err) - } - fmt.Println(p) - fmt.Println("结构体转换成json") - strPlayer, _ := json.Marshal(p) - fmt.Println(string(strPlayer)) - fmt.Println("查询结束") - - /** - Preload 查询关联,一步查询,先查询主表Player,再查询关联表Game - */ - //var players = []Player{} - //db.Table("players").Preload("gameid").First(&players) - //fmt.Println("开始查询") - //fmt.Println(players) - ////for _, p := range players { - //// fmt.Println(p) - ////} - //fmt.Println("结构体转换成json") - //strPlayer, _ := json.Marshal(players) - //fmt.Println(string(strPlayer)) - //fmt.Println("查询结束") - - /** - 带条件的预加载插座 - */ - //var players = []Player{} - //db.Where("id = ?", 2).Find(&players) - //fmt.Printf("ID: %d, Name: %s, Age: %d, GameId: %d\nGame :%s\n", players[0].ID, players[0].Name, players[0].Age, players[0].GameID, players[0].Game.Name) - - //var games = []Game{} - //db.Where("gameid = ?", 2).Find(&games) - //fmt.Printf("ID: %d, Name: %s\n", games[0].ID, games[0].Name) - -} diff --git a/Gin/demo01_base/main.go b/Gin/demo01_base/main.go deleted file mode 100644 index 173242a0c6dbc69ccaa25cdb5b65ede8f9fa3305..0000000000000000000000000000000000000000 --- a/Gin/demo01_base/main.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import "github.com/gin-gonic/gin" - -/** - * @Description:Gin框架练习 - */ -func main() { - - //1.路由 - /** - * @Description:创建一个默认的路由引擎 - * @return *Engine 容器对象,包含路由、中间件和配置等信息 - */ - r := gin.Default() - - //2.绑定路由规则,执行的函数 - /** - * @Description:gin.Context,封装了request和response - * @param relativePath string - * @param handlerFunc ...HandlerFunc--视图函数 - */ - r.GET("/ping", func(c *gin.Context) { - //响应数据 - /** - 第一步:解析get/post请求的参数 - 第二步:处理业务逻辑 - */ - c.String(200, "pong") - - /** - * @Description:JSON序列化 - * @param code int - * @param obj interface{} - */ - //c.JSON(200, gin.H{ - // "message": "pong", - //}) - }) - - //3.启动服务--监听端口 - /** - 对 net/http ListenAndServe(addr,engine)的封装 - */ - - r.Run(":8008") - -} diff --git a/Gin/demo02/main.go b/Gin/demo02/main.go deleted file mode 100644 index 1dcaaf631b674653d67485863b5654225f6035d3..0000000000000000000000000000000000000000 --- a/Gin/demo02/main.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "strings" -) - -type User struct { - //post数据的字段名必须和json的key一致,否则无法绑定 - //binding:"required"表示必须要传递该参数 - Name string `json:"name" binding:"required"` - Password string `json:"password"` -} - -/** - * @Description:Gin框架练习 - */ -func main() { - - r := gin.Default() - - //01基本路由 - /** - r.GET("/ping", func(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "pong", - }) - }) - */ - - //02API路由(带参) http.StatusOK==200 - r.GET("/user/:name/*action", func(c *gin.Context) { - name := c.Param("name") - action := c.Param("action") - //截取/ - action = strings.Trim(action, "/") - c.String(http.StatusOK, name+" 正在 "+action) - }) - - //03URL路由 - r.GET("/user", func(c *gin.Context) { - //获取值,如果没有,则返回nil - name1 := c.Query("name1") - //获取值,如果没有,则返回默认值 - name2 := c.DefaultQuery("name2", "(默认名)jack") - c.String(http.StatusOK, fmt.Sprintf("hello %s 和 %s", name1, name2)) - }) - - //04表单路由 - /** - shouldBind方法可以根据请求头中content-type的类型来做不同的binding操作 - 可以获取到get、post、put、delete等请求方式的参数 - 并且可以根据参数的类型来做不同的binding操作(进行校验) - */ - r.POST("/login", func(c *gin.Context) { - //c.HTML(http.StatusOK, "login.html", nil) - var user User - if err := c.ShouldBind(&user); err != nil { - fmt.Printf("请求错误:%s", err.Error()) - c.String(http.StatusOK, "表单路由错误\t") - } - fmt.Println(user.Name, user.Password) - c.String(http.StatusOK, fmt.Sprintf("用户:%v", user)) - }) - - r.Run(":8008") - -} diff --git a/Gin/note/go.go b/Gin/note/go.go deleted file mode 100644 index 59e2303015d3ec839c5aafe8a7a7f92fd4fa5535..0000000000000000000000000000000000000000 --- a/Gin/note/go.go +++ /dev/null @@ -1,66 +0,0 @@ -package note - -/** -学习资料 -http://v5blog.cn/go/ -*/ - -/** - 1、初始化项目 -go mod init router_layer //初始化项目 -go mod tidy //整理依赖包,删除不用的依赖包--更新项目中使用的模块 -go get //下载依赖包 -go mod vendor go mod download go mod verify -go mod graph go mod edit go mod why - -go build //打包项目 -go build -o router_layer.exe //指定打包文件名 - -*/ - -/** -go env 检查go的环境变量 -go env -w GOPROXY=https://goproxy.cn,direct 设置代理 -go env -w GO111MODULE=on 开启go mod -go env set GO111MODULE 查看os设置值 - -*/ - -/** -go get 参数 用法说明 - -go get 下载保存目录:$GOPATH/src -如果设置有多个GOPATH,则保存在第一个GOPATH目录中。 - --a 下载所有依赖包 --t 同时下载命令行指定包的测试代码(测试包) --f 忽略掉对已下载代码包的导入路径的检查 --insecure 允许命令在非安全的scheme(如HTTP)下执行get命令 --fix 在下载代码包后先执行修正动作,而后再进行编译和安装,根据当前GO版本对所下载的模块(包)代码做语法修正 - --get-mode 指定下载模式,可选值有:fetch、update、readonly --get-vcs 指定下载版本控制系统,可选值有:git、hg、svn、bzr、fossil --get-u 指定下载的模块(包)的版本,格式为:module[@version][=revision] --get-d 指定下载的模块(包)的存放目录 --get-insecure 允许命令在非安全的scheme(如HTTP)下执行get命令 --get-json 以JSON格式输出get命令的结果 --get-mod 指定下载的模块(包)的版本,格式为:module[@version][=revision] --get-v 打印出所下载的包名 --get-x 打印输出,get 执行过程中的具体命令 --get-tags 指定下载的模块(包)的版本,格式为:module[@version][=revision] -*/ - -/** -Engine 是 gin 的核心,包含了路由、中间件和配置等信息。 - -Engine.tree 是一个 Radix Tree,用来保存路由信息、Handle方法的映射。 - -Engine.groups 是一个数组,用来保存分组信息。 - -Engine.handlers 是一个 HandlersChain,用来保存中间件信息。 - -Context 是 gin 的上下文,每个请求都会创建一个 Context,用来保存请求的信息,比如请求的 method、path、post 参数、query 参数等。 -其中Handlers是储存处理请求时的中间件和处理方法的数组,index是当前执行的中间件或处理方法的索引。 - - -*/ diff --git a/Gin/router_layer/go.mod b/Gin/router_layer/go.mod deleted file mode 100644 index d4e1ec6cfcff4cb88958eac6fe92a8ac8b2a3cc0..0000000000000000000000000000000000000000 --- a/Gin/router_layer/go.mod +++ /dev/null @@ -1,31 +0,0 @@ -module router_layer - -go 1.20 - -require github.com/gin-gonic/gin v1.9.0 - -require ( - github.com/bytedance/sonic v1.8.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect - github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.11.2 // indirect - github.com/goccy/go-json v0.10.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.9 // indirect - golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect - golang.org/x/crypto v0.5.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/Gin/router_layer/go.sum b/Gin/router_layer/go.sum deleted file mode 100644 index eb5b44a57fc4daa6161ec3be26f6020508043f78..0000000000000000000000000000000000000000 --- a/Gin/router_layer/go.sum +++ /dev/null @@ -1,105 +0,0 @@ -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= -github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= -github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= -github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= -github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= -github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= -github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/Gin/router_layer/main.go b/Gin/router_layer/main.go deleted file mode 100644 index 0a20e7b65cf69cd819f7fdf47a3dafef32a70e37..0000000000000000000000000000000000000000 --- a/Gin/router_layer/main.go +++ /dev/null @@ -1,19 +0,0 @@ -package main - -import ( - "github.com/gin-gonic/gin" - - //go mod 文件中指定的路径 - "router_layer/routers" -) - -func main() { - - r := gin.Default() - - routers.LoadUsers(r) - routers.LoadMandges(r) - routers.LoadRedirect(r) - - r.Run(":8008") -} diff --git a/Gin/router_layer/routers/manger.go b/Gin/router_layer/routers/manger.go deleted file mode 100644 index 2a27d92a25092765804229c64e194b81bcd0ef63..0000000000000000000000000000000000000000 --- a/Gin/router_layer/routers/manger.go +++ /dev/null @@ -1,20 +0,0 @@ -package routers - -import ( - "github.com/gin-gonic/gin" - "net/http" - "strings" -) - -func LoadMandges(e *gin.Engine) { - e.GET("/manger/:name/*action", MangerHandler) -} - -func MangerHandler(c *gin.Context) { - name := c.Param("name") - action := c.Param("action") - //截取/ - action = strings.Trim(action, "/") - c.String(http.StatusOK, "路由分层--manger层\n") - c.String(http.StatusOK, "管理员"+name+" 正在 "+action) -} diff --git a/Gin/router_layer/routers/redirect.go b/Gin/router_layer/routers/redirect.go deleted file mode 100644 index 6f251fe38ce99b7e336b05e5d8dec7647e540b50..0000000000000000000000000000000000000000 --- a/Gin/router_layer/routers/redirect.go +++ /dev/null @@ -1,18 +0,0 @@ -package routers - -import ( - "github.com/gin-gonic/gin" - "net/http" - "time" -) - -func LoadRedirect(e *gin.Engine) { - e.GET("/redirect1", func(c *gin.Context) { - //1 - c.String(200, "重定向即将开始,倒数3秒\n") - time.Sleep(3 * time.Second) - //2 - c.Redirect(http.StatusMovedPermanently, "http://www.bilibili.com/") - //1和2不能同时启动吗 - }) -} diff --git a/Gin/router_layer/routers/users.go b/Gin/router_layer/routers/users.go deleted file mode 100644 index 026b1293781fbcad4a41ad846f3614ea12d15b3a..0000000000000000000000000000000000000000 --- a/Gin/router_layer/routers/users.go +++ /dev/null @@ -1,21 +0,0 @@ -package routers - -import ( - "github.com/gin-gonic/gin" - "net/http" - "strings" -) - -func LoadUsers(e *gin.Engine) { - e.GET("/user/:name/*action", UserHandler) -} - -func UserHandler(c *gin.Context) { - name := c.Param("name") - action := c.Param("action") - //截取/ - action = strings.Trim(action, "/") - c.String(http.StatusOK, "路由分层--user层\n") - c.String(http.StatusOK, "用户"+name+" 正在 "+action) - -} diff --git a/README.md b/README.md index cd055155ec9c5362c635bfc16e5c515ba5a49cd0..23a8caebfa408da062313fec0559d7bc7fa67484 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ -# GoWebExercise - -#### 介绍 -goweb练习 - - - +# goland练习 + +#### 介绍 +goweb练习
+20230314 start + diff --git a/client_get/main.go b/client_get/main.go deleted file mode 100644 index 5bb7826aa77f7045f43ff4fbcd4bce3ee2463630..0000000000000000000000000000000000000000 --- a/client_get/main.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "net/http" - "net/url" -) - -/* -* -使用net/http包 -作为web的客户端发送get请求 -*/ -func main() { - - //1.直接通过url拼接url字符串 - //apiUrl := "http://localhost:8008/req/get?age=24&name=zhang&password=code" - apiUrl := "http://127.0.0.1:8008/req/get" - - //2.通过url.Parse进行url解析 - data := url.Values{} - //中文会乱码 - data.Set("name", "zhang") - data.Set("password", "code2") - data.Set("age", "24") - u, _ := url.ParseRequestURI(apiUrl) - u.RawQuery = data.Encode() - fmt.Println("请求的地址:", u.String()) - resp, err := http.Get(u.String()) - if err != nil { - fmt.Println(err) - } - body, _ := ioutil.ReadAll(resp.Body) - fmt.Println(string(body)) -} diff --git a/client_post/main.go b/client_post/main.go deleted file mode 100644 index 96ea2fef0f13481b678caa8c41cf5220caa475d4..0000000000000000000000000000000000000000 --- a/client_post/main.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "net/http" - "strings" -) - -func main() { - url := "http://127.0.0.1:8008/req/post" - //模拟form表单提交数据 content-type:application/x-www-form-urlencoded - //传json数据: json content-type:application/json - contentType := "application/json" - - data := `{"name":"jack","password":"code2","age":24}` - - resp, _ := http.Post(url, contentType, strings.NewReader(string(data))) - body, _ := ioutil.ReadAll(resp.Body) - fmt.Println(string(body)) -} diff --git a/gin/g.go b/gin/g.go new file mode 100644 index 0000000000000000000000000000000000000000..02478b6572991404bfb95392fb8e2e4767d963a8 --- /dev/null +++ b/gin/g.go @@ -0,0 +1,37 @@ +package main + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +func Index(context *gin.Context) { + context.String(200, "Hello 枫枫!") +} +func main() { + + // 创建一个默认的路由 + router := gin.Default() + + router.GET("/xml", func(c *gin.Context) { + c.XML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK}) + }) + router.GET("/yaml", func(c *gin.Context) { + c.YAML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK}) + }) + + //加载模板 + router.LoadHTMLGlob("gin/templates/*") + + //定义路由 + router.GET("/tem", func(c *gin.Context) { + //根据完整文件名渲染模板,并传递参数 + c.HTML(http.StatusOK, "index.html", gin.H{ + "title": "Main djw ", + }) + }) + + // 启动监听,gin会把web服务运行在本机的0.0.0.0:8080端口上 + router.Run("0.0.0.0:80") + +} diff --git a/gin/sever/ser.go b/gin/sever/ser.go new file mode 100644 index 0000000000000000000000000000000000000000..fe5268716640577489e6c19a688f8b92f0df946f --- /dev/null +++ b/gin/sever/ser.go @@ -0,0 +1,39 @@ +package main + +import ( + "fmt" + "github.com/gorilla/websocket" + "net/http" +) + +var UP = websocket.Upgrader{ + ReadBufferSize: 1024, + WriteBufferSize: 1024, +} + +func handler(res http.ResponseWriter, req *http.Request) { + // 服务升级 + conn, err := UP.Upgrade(res, req, nil) + if err != nil { + fmt.Println(err) + return + } + for { + // 消息类型,消息,错误 + _, p, err := conn.ReadMessage() + if err != nil { + break + } + conn.WriteMessage(websocket.TextMessage, []byte(fmt.Sprintf("你说的是:%s吗?", string(p)))) + //fmt.Println(t, string(p)) + fmt.Println(string(p)) + + } + defer conn.Close() + fmt.Println("服务关闭") +} + +func main() { + http.HandleFunc("/", handler) + http.ListenAndServe(":8080", nil) +} diff --git a/gin/templates/index.html b/gin/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..0529bd15e2558d469e965e50c759752e7c3ed23a --- /dev/null +++ b/gin/templates/index.html @@ -0,0 +1,10 @@ + + + + + {{.title}} + + + + + \ No newline at end of file diff --git a/go.mod b/go.mod index c87ef1a5ef9c306f3b272fcd80c7089fc961bde6..b431939b1cd4effadf3c217bfbf56f072b1d27d0 100644 --- a/go.mod +++ b/go.mod @@ -1,38 +1,40 @@ -module GoWebExercise +module excerise go 1.20 require ( - github.com/gin-gonic/gin v1.9.0 - gorm.io/driver/mysql v1.5.1 - gorm.io/gorm v1.25.1 + github.com/gin-gonic/gin v1.9.1 + github.com/gorilla/websocket v1.5.1 + gorm.io/driver/mysql v1.5.4 + gorm.io/gorm v1.25.7 ) require ( - github.com/bytedance/sonic v1.8.8 // indirect + github.com/bytedance/sonic v1.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.13.0 // indirect - github.com/go-sql-driver/mysql v1.7.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/leodido/go-urn v1.2.4 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/BookManage/go.sum b/go.sum similarity index 55% rename from BookManage/go.sum rename to go.sum index 4249273ea7546ef63ccec983b819094957268fe1..2377f3926006d2d6862ef1899a9a96b4e1de781b 100644 --- a/BookManage/go.sum +++ b/go.sum @@ -1,93 +1,98 @@ github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= -github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= -github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= -github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= -github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= -github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= -gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o= -gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= -gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/driver/mysql v1.5.4 h1:igQmHfKcbaTVyAIHNhhB888vvxh8EdQ2uSUT0LPcBso= +gorm.io/driver/mysql v1.5.4/go.mod h1:9rYxJph/u9SWkWc9yY4XJ1F/+xO0S/ChOmbk3+Z5Tvs= +gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A= +gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/gorm/enum01.go b/gorm/enum01.go new file mode 100644 index 0000000000000000000000000000000000000000..dbbcafc407242d6a27bc56228102cd17174e13a1 --- /dev/null +++ b/gorm/enum01.go @@ -0,0 +1,50 @@ +package main + +import ( + "encoding/json" + "fmt" +) + +type Status int + +func (status Status) MarshalJSON() ([]byte, error) { + var str string + switch status { + case Running: + str = "Running" + case Except: + str = "Except" + case OffLine: + str = "Status" + } + return json.Marshal(str) +} + +type Host struct { + ID uint `json:"id"` + Name string `json:"name"` + Status Status `json:"status"` +} + +const ( + Running Status = 1 + Except Status = 2 + OffLine Status = 3 +) + +// var StatusTypeList = []Status{Running, Except, OffLine} +var StatusStringList = []string{"Running", "Except", "OffLine"} + +// String 转字符串 +func (s Status) String() string { + return StatusStringList[s-1] +} + +func main() { + //host := Host{1, "枫枫", 1} + + //data, _ := json.Marshal(host) + //fmt.Println(string(data)) // {"id":1,"name":"枫枫","status":"Running"} + + fmt.Println(Status(2)) +} diff --git a/gorm/enumWithSql.go b/gorm/enumWithSql.go new file mode 100644 index 0000000000000000000000000000000000000000..42c1afd6269ff68caa2659fc6dbe4817924a47ce --- /dev/null +++ b/gorm/enumWithSql.go @@ -0,0 +1,100 @@ +package main + +import ( + "fmt" + "time" +) + +type Weekday int + +const ( + Sunday Weekday = iota + 1 // EnumIndex = 1 + Monday // EnumIndex = 2 + Tuesday // EnumIndex = 3 + Wednesday // EnumIndex = 4 + Thursday // EnumIndex = 5 + Friday // EnumIndex = 6 + Saturday // EnumIndex = 7 +) + +var WeekStringList = []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} +var WeekTypeList = []Weekday{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} + +// String 转字符串 +func (w Weekday) String() string { + return WeekStringList[w-1] +} + +//// MarshalJSON 自定义类型转换为json +//func (w Weekday) MarshalJSON() ([]byte, error) { +// return json.Marshal(w.String()) +//} +// +//// EnumIndex 自定义类型转原始类型 +//func (w Weekday) EnumIndex() int { +// return int(w) +//} + +// ParseWeekDay 字符串转自定义类型 +//func ParseWeekDay(week string) Weekday { +// for i, i2 := range WeekStringList { +// if week == i2 { +// return WeekTypeList[i] +// } +// } +// return Monday +//} + +// ParseIntWeekDay 数字转自定义类型 + +func ParseIntWeekDay(week int) Weekday { + return Weekday(week) +} + +type DayInfo struct { + Weekday Weekday `json:"weekday" gorm:"size:3"` + Date time.Time `json:"date"` +} + +func main() { + //w := 1 + //fmt.Println(w) + + //dayInfo := DayInfo{Weekday: 1, Date: time.Now()} + //data, err := json.Marshal(dayInfo) + //fmt.Println(string(data), err) + + //week := ParseWeekDay("Saturday") + //fmt.Println(week) + // + //week = ParseIntWeekDay(2) + //fmt.Println(week) + + //fmt.Println(Weekday(2)) + + //数据库测试 + //DB.Debug().AutoMigrate(&DayInfo{}) + + //DB.Debug().Create(DayInfo{ + // Weekday: 6, + // Date: time.Now(), + //}) + // //INSERT INTO `djw07_day_infos` (`weekday`,`date`) VALUES (4,'2024-03-14 17:27:48.306') + + var day []DayInfo + DB.Debug().Limit(3).Offset(2).Find(&day) + fmt.Println(day) + + //data, _ := json.Marshal(day) + //fmt.Println(string(data)) + + //有问题 + //var engine string + //result := DB.Raw(" SHOW TABLE STATUS WHERE `Name` = 'djw07_day_infos';\n ").Scan(&engine) + //if result.Error != nil { + // panic("failed to query table engine") + //} + //// + ////fmt.Printf("表使用的引擎:%s\n", engine) + +} diff --git a/gorm/readme.md b/gorm/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..c4fe01af4a43f9d5d6ec08f16b2522734c1bc6e5 --- /dev/null +++ b/gorm/readme.md @@ -0,0 +1,3 @@ +# 远程数据库 +本项目的数据库用的是阿里云的轻量服务器上的 +是用docker生成的mysql8.0 \ No newline at end of file diff --git a/gorm/sql01.go b/gorm/sql01.go new file mode 100644 index 0000000000000000000000000000000000000000..aea3cef072fa03e5ffb801d32adb0a2c59c1d0d3 --- /dev/null +++ b/gorm/sql01.go @@ -0,0 +1,64 @@ +package main + +import ( + "fmt" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/schema" +) + +type StudentInfo struct { + Email *string `gorm:"size:32"` // 使用指针是为了存空值 + Addr string `gorm:"column:y_addr;size:16"` + Gender bool `gorm:"default:true"` +} + +type Student struct { + ID uint `gorm:"size:3"` + Name string `gorm:"size:8"` + Age int `gorm:"size:3"` + Gender bool + Email *string `gorm:"size:32"` +} + +var s1 Student +var DB *gorm.DB + +func init() { + username := "root" //账号 + password := "djw210503" //密码 + host := "116.62.160.30" //数据库地址,可以是Ip或者域名 + port := 1234 //数据库端口 + Dbname := "ceshi01" //数据库名 + timeout := "10s" //连接超时,10秒 + + // root:root@tcp(127.0.0.1:3306)/gorm? + dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout) + //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。 + + db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + TablePrefix: "djw07_", // 表名前缀 + SingularTable: false, // 单数表名 + NoLowerCase: false, // 关闭小写转换 + }, + }) + + if err != nil { + panic("连接数据库失败, error=" + err.Error()) + } + + var studentList []Student + for i := 0; i < 100; i++ { + studentList = append(studentList, Student{ + Name: fmt.Sprintf("机器人%d号", i+1), + Age: 21, + Gender: true, + //Email: &email, + }) + } + DB = db + // 连接成功 + //DB.Create(&studentList) + +} diff --git a/gorm/sql02.go b/gorm/sql02.go new file mode 100644 index 0000000000000000000000000000000000000000..d5ffc1500929e76ea5f579ab9ce1dc3d1a3defae --- /dev/null +++ b/gorm/sql02.go @@ -0,0 +1,76 @@ +package main + +import ( + "fmt" + "gorm.io/gorm" +) + +func (user *Student) BeforeCreate(tx *gorm.DB) (err error) { + email := fmt.Sprintf("%sbefore@qq.com", user.Name) + user.Email = &email + return nil +} + +var studentList []Student +var student Student + +func main() { + //for i := 0; i < 30; i++ { + // //studentList = append(studentList, Student{ + // // Name: fmt.Sprintf("机器人%d号", i+1), + // // Age: 21, + // // Gender: true, + // // Email: &email, + // //}) + // studentList = append(studentList, Student{ + // ID: uint(i + 51), + // Gender: false, + // }) + //} + //DB.Debug().Save(&studentList) + //单独更新一个 + //DB.Debug().Take(&student) + //student.Name = "临时" + //DB.Debug().Save(&student) + + //DB.Debug().Where("id > 20 and id <60").Find(&studentList).Updates(Student{ + // Name: "temp", + // Gender: false,//gender没有更新 + //}) + + //DB.Model(&Student{}).Debug().Where("id < 80 and id >60").Select("name", "gender").Updates(Student{ + // Name: "test", + // Gender: false, + //}) + + //DB.Debug().Delete(&studentList) + // 排除年龄大于23的 + + type Base struct { + //Count1 int `gorm:"column:count(id)"` + //Count2 int `gorm:"column:count(gender)"` + Name string + Age int + } + + type NameList struct { + Name string + } + //var b1 []Base + //var a1 []NameLis t + // + //DB.Debug().Raw(`SELECT name,age FROM f_students GROUP BY gender`).Scan(&b1) + // + //DB.Debug().Table("f_students").Select("name").Scan(&a1) + //fmt.Println(b1) + + //var res []map[string]any + //DB.Table("f_students").Find(&res) + //fmt.Println(res) + + var users []Student // 假设 Student 是你的结构体类型 + DB.Debug().Table("f_students").Scopes(func(db *gorm.DB) *gorm.DB { + return db.Where("age < ? AND gender = ?", 23, true) // 注意这里使用的是布尔值true代替了数字1表示gender + }).Find(&users) + fmt.Println(users) +} diff --git a/gorm/sql03.go b/gorm/sql03.go new file mode 100644 index 0000000000000000000000000000000000000000..a5c87d07340c0aaa07f947f3589cc6f7838bfb4b --- /dev/null +++ b/gorm/sql03.go @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" + "time" +) + +// // 多对多 +type Article struct { + ID uint + Title string + Tags []Tag `gorm:"many2many:article_tags"` +} + +type Tag struct { + ID uint + Name string +} + +type ArticleTag struct { + ArticleID uint `gorm:"primaryKey"` + TagID uint `gorm:"primaryKey"` + CreatedAt time.Time +} + +func main() { + + // 设置Article的Tags表为ArticleTag + DB.Debug().SetupJoinTable(&Article{}, "Tags", &ArticleTag{}) + // 如果tag要反向应用Article,那么也得加上 + // DB.SetupJoinTable(&Tag{}, "Articles", &ArticleTag{}) + //err := DB.Debug().AutoMigrate(&Article{}, &Tag{}, &ArticleTag{}) + //fmt.Println(err) + //var tags []Tag + //DB.Debug().Find(&tags, "id = 2 or id = 3 or id = 4") + //DB.Debug().Save(&Article{ + // Title: "gin零基础入门", + // Tags: tags, + //}) + + //var article []Article + //var tags []Tag + //DB.Find(&tags, []int{2, 3, 4}) + // + //DB.Preload("Tags").Find(&article, 2) + //DB.Model(&article).Association("Tags").Replace(tags) + //fmt.Println(article) + + //DB.Debug().Raw("DELETE FROM djw_article_tags WHERE article_id = 3;\n").Find(&article) + + //DB.Debug().Preload("Tags").Raw("DELETE FROM djw_articles WHERE id = 3;\n").Find(&article) + //fmt.Println(article) + + var article Article + var tags []Tag + DB.Find(&tags, []int{2, 3}) + + DB.Preload("Tags").Take(&article, 2) + DB.Debug().Model(&article).Association("Tags").Replace(tags) + fmt.Println(article) + +} diff --git a/gorm/sql04.go b/gorm/sql04.go new file mode 100644 index 0000000000000000000000000000000000000000..e91f30739b01e3dafb2df4f750b127ec39b6bd45 --- /dev/null +++ b/gorm/sql04.go @@ -0,0 +1,69 @@ +package main + +import ( + "time" +) + +type ArticleModel struct { + ID uint + Title string + Tags []TagModel `gorm:"many2many:article_tags;joinForeignKey:ArticleID;JoinReferences:TagID"` +} + +type TagModel struct { + ID uint + Name string + Articles []ArticleModel `gorm:"many2many:article_tags;joinForeignKey:TagID;JoinReferences:ArticleID"` +} + +type ArticleTagModel struct { + ArticleID uint `gorm:"primaryKey"` // article_id + TagID uint `gorm:"primaryKey"` // tag_id + CreatedAt time.Time +} + +// 指定 Product 模型对应的数据库表名称为 "abc" +// +// func (guaNxiModel) TableName() string { +// return "abc" +// } +func main() { + //DB.SetupJoinTable(&ArticleModel{}, "Tags", &ArticleTagModel{}) + //DB.SetupJoinTable(&TagModel{}, "Articles", &ArticleTagModel{}) + //err := DB.Debug().AutoMigrate(&ArticleModel{}, &TagModel{}, &ArticleTagModel{}) + //fmt.Println(err) + + //var artivleList []ArticleModel + //for i := 0; i < 5; i++ { + // artivleList = append(artivleList, ArticleModel{ + // Title: fmt.Sprintf("测试文章%d号", i+1), + // }) + //} + //var tagList []TagModel + //for i := 0; i < 5; i++ { + // tagList = append(tagList, TagModel{ + // Name: fmt.Sprintf("测试biaoqian%d号", i+1), + // }) + //} + //DB.Debug().Create(&tagList) + + var article ArticleModel + var tags []TagModel + + //Error 1146 (42S02): Table 'ceshi01.djw04_article_tags' doesn't exist + //DB.Find(&tags, []int{8, 6, 7}) + //DB.Preload("Tags").Take(&article, 2) + //DB.Model(&article).Association("Tags").Replace(tags) + + //给已有文章关联标签 + DB.SetupJoinTable(&ArticleModel{}, "Tags", &ArticleTagModel{}) + article.ID = 1 + DB.Debug().Find(&tags, "name in ?", []string{"测试biaoqian1号", "测试biaoqian2号"}) + DB.Debug().Take(&article, article.ID).Association("Tags").Append(tags) + + //删除标签 + //DB.Preload("Tags").Take(&article, 2) + //DB.Model(&article).Association("Tags").Delete(article.Tags) + //fmt.Println(article) + +} diff --git a/gorm/sql05.go b/gorm/sql05.go new file mode 100644 index 0000000000000000000000000000000000000000..0d961994f3731619f195b0eed209cc3e66269d79 --- /dev/null +++ b/gorm/sql05.go @@ -0,0 +1,139 @@ +package main + +import ( + "database/sql/driver" + "encoding/json" + "errors" + "fmt" + "time" +) + +type UserModel05 struct { + ID uint `json:"id"` + Name string `json:"name"` + Collects []ArticleModel05 `gorm:"many2many:user_collect_models;joinForeignKey:UserID;JoinReferences:ArticleID;type:string"` +} + +type ArticleModel05 struct { + ID uint `json:"id"` + Title string `json:"title"` + // 这里也可以反向引用,根据文章查哪些用户收藏了 +} + +// UserCollectModel 用户收藏文章表 +type UserCollectModel05 struct { + UserID uint `gorm:"primaryKey" json:"uID"` // article_id + ArticleID uint `gorm:"primaryKey" json:"articleID"` // tag_id + CreatedAt time.Time +} + +// UserCollectModel 用户收藏文章表 +type UserCollectModel05new struct { + UserID uint `gorm:"primaryKey"` // article_id + UserModel UserModel05 `gorm:"foreignKey:UserID"` + ArticleID uint `gorm:"primaryKey"` // tag_id + ArticleModel ArticleModel05 `gorm:"foreignKey:ArticleID"` + CreatedAt time.Time +} + +// Scan 从数据库中读取出来 +func (a *ArticleModel05) Scan(value interface{}) error { + bytes, ok := value.([]byte) + if !ok { + return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) + } + + article := ArticleModel05{} + fmt.Println("used scan") + err := json.Unmarshal(bytes, &article) + *a = article + return err +} + +// Value 存入数据库 +func (a ArticleModel05) Value() (driver.Value, error) { + fmt.Println("used value") + return json.Marshal(a) +} + +func main() { + //err := DB.Raw("DROP TABLE djw04_tag_models") + //fmt.Println(err) + + //DB.Debug().SetupJoinTable(&UserModel05{}, "Collects", &UserCollectModel05new{}) + //err := DB.Debug().AutoMigrate(&UserModel05{}, &ArticleModel05{}, &UserCollectModel05new{}) + //fmt.Println(err) + + //var userlist []UserModel05 + //var articlelist []ArticleModel05 + //for i := 0; i < 5; i++ { + // userlist = append(userlist, UserModel05{ + // Name: fmt.Sprintf("djw%d号", i+1), + // }) + //} + //for i := 0; i < 5; i++ { + // articlelist = append(articlelist, ArticleModel05{ + // Title: fmt.Sprintf("wenzhang%d号", i+1), + // }) + //} + //DB.Debug().Save(&articlelist) + + //给已有文章关联标签 + //var articlelist []ArticleModel05 + //var user UserModel05 + //DB.SetupJoinTable(&UserModel05{}, "Collects", &UserCollectModel05{}) + //user.ID = 4 + //DB.Debug().Find(&articlelist, "id in ?", []uint{4, 3, 5}) + //DB.Debug().Take(&user, user.ID).Association("Collects").Append(articlelist) + + //普通查询 + //var user UserModel05 + //DB.Preload("Collects").Take(&user, "name LIKE ?", "%1号") + //fmt.Println(user) + + //升级查询(感觉没有直接用sql方便) + //var collects []UserCollectModel05new + //var collectshow []UserCollectModel05 + + //var user UserModel05 + //DB.Take(&user, "name LIKE ?", "%1号") + //// 这里用map的原因是如果没查到,那就会查0值,如果是struct,则会忽略零值,全部查询 + //DB.Debug().Preload("UserModel").Preload("ArticleModel").Where(map[string]any{"user_id": user.ID}).Find(&collects).Scan(&collectshow) + // + //for _, collect := range collectshow { + // fmt.Println(collect) + //} + + //升级查询(直接用sql方便) + //DB.Raw("SELECT * FROM djw05_user_model05 WHERE name LIKE '%1%' ; ").Scan(&user) + //fmt.Println(user) + + //DB.Raw(" SELECT * " + + // "FROM djw05_user_collect_model05news " + + // "WHERE user_id = (select id " + + // "from djw05_user_model05 " + + // "where name LIKE '%1%' )").Scan(&collectshow) + // + //for _, collect := range collectshow { + // fmt.Println(collect) + //} + + //搭配value和scan方法 + //DB.Debug().SetupJoinTable(&UserModel05{}, "Collects", &UserCollectModel05{}) + //DB.Debug().Create(&UserModel05{ + // Name: "佳文", + // Collects: []ArticleModel05{ + // ArticleModel05{ + // Title: "佳文一号文章", + // }, + // ArticleModel05{ + // Title: "佳文二号文章", + // }, + // }, + //}) + + var user UserModel05 + DB.Take(&user) + fmt.Println(user) + +} diff --git a/gorm/sql06.go b/gorm/sql06.go new file mode 100644 index 0000000000000000000000000000000000000000..a29aa54f993a0f3b9c4829ad7d950afc2d942d0d --- /dev/null +++ b/gorm/sql06.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" +) + +type Info06 struct { + Status string `json:"status"` + Addr string `json:"addr"` + Age int `json:"age"` +} + +// Scan 从数据库中读取出来 +//func (i *Info06) Scan(value interface{}) error { +// bytes, ok := value.([]byte) +// if !ok { +// return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) +// } +// +// fmt.Println("1111111") +// Info06 := Info06{} +// err := json.Unmarshal(bytes, &Info06) +// *i = Info06 +// return err +//} +// +//// Value 存入数据库 +//func (i Info06) Value() (driver.Value, error) { +// fmt.Println("2222222") +// return json.Marshal(i) +//} + +type User06 struct { + ID uint + Name string + Info06 Info06 `gorm:"type:string"` +} + +func main() { + + //err := DB.Debug().AutoMigrate(&Info06{}, &User06{}) + + //err := DB.Create(&User06{ + // Name: "jiawen", + // Info06: Info06{ + // Status: "hubei", + // Addr: "jingmen", + // Age: 21, + // }, + //}) + // + //fmt.Println(err) + + var user User06 + DB.Debug().Take(&user) + fmt.Println(user) + +} diff --git "a/go\345\237\272\347\241\200/lock01.go" "b/go\345\237\272\347\241\200/lock01.go" new file mode 100644 index 0000000000000000000000000000000000000000..d068f33615eda2414588e7f9098878c80757238a --- /dev/null +++ "b/go\345\237\272\347\241\200/lock01.go" @@ -0,0 +1,22 @@ +package main + +import ( + "sync" +) + +var wg sync.WaitGroup + +func pow(a int, b int) int { + if b == 0 { + return a + } + num := a + for i := 1; i < b; i++ { + a *= num + } + return a +} + +func main() { + println(pow(10, 0)) +} diff --git a/note/0314task.md b/note/0314task.md new file mode 100644 index 0000000000000000000000000000000000000000..d26500262006983791d98958b6e97440abcff6ce --- /dev/null +++ b/note/0314task.md @@ -0,0 +1,22 @@ +# 自学阶段(2.27-3.14) +看完并跟练完 goland、gin、gorm的基础练习 +每天两道leecode的题 +(gin和gorm里面很多技巧跟着练就可以了,面试不用太在乎这些技巧,比如gorm里很多用原生sql语句会更方便一些) + +# 回答问题:(3.14-3.21) +## gorm +1、mysql 连接池创造和维持 +2、gorm 链式连接是如何实现 +3、gorm 的底层 如何防御注入 + +## gin +1、gin 结构有哪些 | 如何响应http请求 +2、gin 上下文(context)是怎么实现的 +3、gin中间件是什么(底层原理) +4、gin路由是如何实现的 与原生的区别 + +## goland +1、go new与make的区别 +2、go 切片(slice)与数组的区别 +3、go 切片如何扩容 +4、go 错误处理有哪些注意事项 :panic、recover、defer…… \ No newline at end of file diff --git a/os/main.go b/os/main.go deleted file mode 100644 index f165a0be95e7139a5c0bfbbf104f7486ac096b42..0000000000000000000000000000000000000000 --- a/os/main.go +++ /dev/null @@ -1,144 +0,0 @@ -package main - -import ( - "fmt" - "os" -) - -func main() { - - //打印当前目录 - //PrintCurrentPath() - - //查看当前目录下是否存在Test_Dir文件夹,不存在则创建文件夹 - //fmt.Println("当前目录下是否存在Test_Dir文件夹") - //_, err := os.Stat("Test_Dir") - //if err != nil { - // fmt.Println("文件夹不存在") - // //创建文件夹 - // os.Mkdir("Test_Dir", 0777) - //} else { - // fmt.Print("\t文件夹存在") - //} - - //切换路径 - //os.Chdir("./Test_Dir ") - //PrintCurrentPath() - - //创建文件 - //fmt.Println("创建文件") - //os.Create("./test1.txt") - //PrintCurrentPathFile() - - //重命名文件 - //fmt.Println("重命名文件") - //os.Rename("./test1.txt", "./test2.txt") - //PrintCurrentPathFile() - - //删除文件 - //fmt.Println("删除文件") - //os.Remove("./test2.txt") - //PrintCurrentPathFile() - - //删除当前文件夹下的所有文件 - //fmt.Println("删除当前文件夹下的所有文件") - //os.RemoveAll("./Test_Dir") - - //删除当前文件夹 - //fmt.Println("删除当前文件夹") - //os.Chdir("../") - //os.Remove("Test_Dir") - //PrintCurrentPath() - -} - -// 打印当前路径 -func PrintCurrentPath() { - fmt.Println("当前路径") - fmt.Println(os.Getwd()) -} - -// 查看当前路径下的文件 -func PrintCurrentPathFile() { - fmt.Println("当前路径下的文件") - file, _ := os.Open(".") - names, _ := file.Readdirnames(0) - for _, name := range names { - fmt.Println(name) - } -} - -/** -O_RDONLY 打开只读文件 -O_WRONLY 打开只写文件 -O_RDWR 打开可读可写文件 -O_APPEND 写操作时将数据附加到文件尾部 -O_CREATE 如果不存在将创建一个新文件 -O_EXCL 和O_CREATE一起使用,文件必须不存在 -O_SYNC 打开文件用于同步I/O -O_TRUNC 如果可能,打开时清空文件 -*/ - -/** -文件权限 -0777 所有用户都有读写执行权限 -0700 只有文件所有者有读写执行权限 -0666 所有用户都有读写权限 -0600 只有文件所有者有读写权限 -0444 所有用户都有读权限 -0400 只有文件所有者有读权限 -0222 所有用户都有写权限 -0200 只有文件所有者有写权限 -0111 所有用户都有执行权限 -0100 只有文件所有者有执行权限 -0000 所有用户都没有权限 -0007 所有用户都有读写执行权限 -0006 所有用户都有读写权限 -0005 所有用户都有读执行权限 -0004 所有用户都有读权限 -0003 所有用户都有写执行权限 -0002 所有用户都有写权限 -0001 所有用户都有执行权限 - -文件权限的设置 -1.通过数字设置 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, 0666) -2.通过常量设置 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, os.ModePerm) -3.通过位运算设置 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, os.ModePerm|os.ModeTemporary) -4.通过os.Chmod()设置 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, 0666) - //设置文件权限 - os.Chmod("./test.txt", 0666) - -文件权限的获取 -1.通过os.Stat()获取 - fileInfo, err := os.Stat("./test.txt") - fmt.Println(fileInfo.Mode()) -2.通过os.FileMode()获取 - file, err := os.Open("./test.txt") - fileInfo, err := file.Stat() - fmt.Println(fileInfo.Mode()) - -文件权限的修改 -1.通过os.Chmod()修改 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, 0666) - //设置文件权限 - os.Chmod("./test.txt", 0666) -2.通过os.Chown()修改 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, 0666) - //设置文件权限 - os.Chown("./test.txt", 0, 0) -3.通过os.Chtimes()修改 - //创建文件 - file, err := os.OpenFile("./test.txt", os.O_CREATE, 0666) - //设置文件权限 - os.Chtimes("./test.txt", time.Now(), time.Now()) -*/ diff --git a/sever/main.go b/sever/main.go deleted file mode 100644 index 228bdbb544b446f14fcb3200cb29e4a27cd1fa96..0000000000000000000000000000000000000000 --- a/sever/main.go +++ /dev/null @@ -1,133 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "strconv" -) - -type User struct { - Name string `json:"name"` - Password string `json:"password"` - Age int `json:"age"` -} - -// 假设其为数据库中存储的数据 -var u0 = User{ - Name: "用户名", - Password: "密码", - Age: 24, -} - -/* -开发web的主要步骤 -1:路由 -2:处理函数 ---解析请求的数据(获取对象的id信息等,发送给后端) ---响应数据(把从后端读取到的数据返回给前端或者请求方) -*/ -func main() { - //第一步:路由 - /* - dealGetHandle : 处理函数(处理服务请求) - */ - http.HandleFunc("/req/get", dealGetHandle) - http.HandleFunc("/req/post", dealPostHandle) - - //第三步:启动服务 - /* - addr: 当前server监听的端口号和ip - handle:处理函数 - */ - http.ListenAndServe(":8008", nil) - -} - -func dealGetHandle(w http.ResponseWriter, r *http.Request) { - //1解析请求数据 - /* - r.URL.Query() 返回map[string][]string - r.URL.Query() 从url请求参数 - */ - query := r.URL.Query() - //1.1 通过字典下标 取 路由参数 - /* - 如果get请求不带name参数,就会出错 - 暂时不知道怎么改 - */ - if len(query["name"][0]) > 0 { - name1 := query["name"][0] - fmt.Println("字典下标取 name:", name1) - } else { - name1 := "无" - fmt.Println("字典下标取 name:", name1) - } - - //1.2 通过get方法取值 - name2 := query.Get("name") - age02 := query.Get("age") - //把age转为int类型 - age2 := 0 - age2, _ = strconv.Atoi(age02) - password2 := query.Get("password") - fmt.Println("Get标取 name:", name2) - fmt.Println("Get标取 password:", password2) - fmt.Println("Get标取 age:", age2) - - //打印/r.URL.Query()的返回值 - //fmt.Println(query) - - //2响应数据 - //2.1直接返回数据 - _, err2 := w.Write([]byte("hello get\n")) - if err2 != nil { - return - } - - //2.2解析数据库数据并返回 - var u1 = User{ - Name: name2, - Password: password2, - Age: age2, - } - - //err := json.NewEncoder(w).Encode(u0) - //if err != nil { - // return - //} - - err := json.NewEncoder(w).Encode(u1) - if err != nil { - return - } - -} - -func dealPostHandle(w http.ResponseWriter, r *http.Request) { - - //1.1post请求从http的body中获取数据 - /* - Go 1.16 版本开始,直接调用 io.ReadAll() 函数, - 如果待拷贝数据的容量超过 512 字节,就会开始切片扩容。 - 数据量越大,扩容越频繁,性能受影响越大。 - 可以使用 io.Copy 函数来代替 - */ - bodyContent, _ := ioutil.ReadAll(r.Body) - //byte数组转string - postdata := string(bodyContent) - - var d User - json.Unmarshal([]byte(postdata), &d) - fmt.Printf("%T %v\n", bodyContent, bodyContent) - fmt.Printf("body content:%s\n", postdata) - fmt.Println("post请求已完成") - //2响应数据 - //2.1直接返回数据 - w.Write([]byte("hello post\n")) - - //2.2解析body数据并返回响应内容 - json.NewEncoder(w).Encode(fmt.Sprintf("收到的名字,%s", d.Name)) - -}