第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Gin最新版入門與案例實(shí)戰(zhàn)

難度入門
時(shí)長 2小時(shí)30分
學(xué)習(xí)人數(shù)
綜合評(píng)分9.33
7人評(píng)價(jià) 查看評(píng)價(jià)
10.0 內(nèi)容實(shí)用
9.4 簡潔易懂
8.6 邏輯清晰
  • 這塊需要結(jié)合官方最新文檔寫。

    和視頻中的版本略有差異

    這里貼出我的

    gorm.io/driver/mysql v1.5.7
    gorm.io/gorm v1.25.12?

    package?dao
    
    import?(
    ????"go-ranking/config"
    ????"go-ranking/pkg/logger"
    ????"gorm.io/driver/mysql"
    ????"gorm.io/gorm"
    ????"time"
    )
    
    var?(
    ????Db??*gorm.DB
    ????err?error
    )
    
    func?init()?{
    ????Db,?err?=?gorm.Open(mysql.Open(config.Mysqldb),?&gorm.Config{})
    
    ????//?-----------------------?Connection?Pool?Settings?-----------------------
    ????//?SetMaxIdleConns?sets?the?maximum?number?of?connections?in?the?idle?connection?pool.
    ????sqlDB,?err?:=?Db.DB()
    ????if?err?!=?nil?{
    ???????logger.Error(map[string]interface{}{"database?error":?err.Error()})
    ???????return
    ????}
    ????sqlDB.SetMaxIdleConns(10)
    
    ????//?SetMaxOpenConns?sets?the?maximum?number?of?open?connections?to?the?database.
    ????sqlDB.SetMaxOpenConns(100)
    
    ????//?SetConnMaxLifetime?sets?the?maximum?amount?of?time?a?connection?may?be?reused.
    ????sqlDB.SetConnMaxLifetime(time.Hour)
    
    }
    查看全部
  • 安 gorm依賴?

    go?get?-u?gorm.io/gorm


    安裝 mysql驅(qū)動(dòng)

    go?get?-u?gorm.io/driver/mysql
    查看全部
  • package?main
    
    
    
    import?(
    
    ????"fmt"
    
    )
    
    
    
    func?main()?{
    
    ????fmt.Println("程序開始")
    
    ????safeFunction()
    
    ????fmt.Println("程序繼續(xù)運(yùn)行...")
    
    }
    
    
    
    func?safeFunction()?{
    
    ????defer?func()?{
    
    ????????if?r?:=?recover();?r?!=?nil?{?//?捕獲?panic
    
    ????????????fmt.Println("捕獲到異常:",?r)
    
    ????????}
    
    ????}()
    
    ????
    
    ????fmt.Println("執(zhí)行函數(shù)")
    
    ????panic("觸發(fā)異常")??//?觸發(fā)?panic,程序中斷
    
    ????fmt.Println("這行代碼不會(huì)執(zhí)行")
    
    }
    查看全部
  • 思考:這里?err?:=?context.BindJSON(&parms)?可以寫成?err?:=?context.BindJSON(parms)?嗎?
    /*
    ????答:不可以寫成?err?:=?context.BindJSON(parms),因?yàn)?BindJSON?需要一個(gè)指針類型的參數(shù),即傳入的參數(shù)必須是指向接收數(shù)據(jù)的變量的指針。
    
    ????在?err?:=?context.BindJSON(&parms)?中,&parms?是?parms?的指針,指向這個(gè)?map,所以?BindJSON?可以直接修改?parms?的內(nèi)容,將請(qǐng)求中的?JSON?數(shù)據(jù)解析并賦值到?parms?中。如果寫成?context.BindJSON(parms),則傳入的是?map?值的副本,BindJSON?將無法正確解析并賦值給?parms。
    
    ????為什么?BindJSON?需要指針?
    
    ????BindJSON?的參數(shù)類型是?interface{},在?Go?中,如果要通過一個(gè)函數(shù)修改參數(shù)的內(nèi)容,必須傳遞指針,這樣函數(shù)才能直接操作參數(shù)的內(nèi)存地址,進(jìn)而修改參數(shù)的值。否則,如果傳遞的是值類型,Go?語言會(huì)復(fù)制該值,導(dǎo)致函數(shù)內(nèi)對(duì)該副本的修改不會(huì)影響到原始變量。
    
    ????示例對(duì)比
    
    ????以下是對(duì)比:
    
    ????正確寫法
    
    ????parms?:=?make(map[string]interface{})
    ????err?:=?context.BindJSON(&parms)??//?傳入指針
    ????//?解析后?parms?中將包含?JSON?數(shù)據(jù)
    
    ????錯(cuò)誤寫法
    
    ????parms?:=?make(map[string]interface{})
    ????err?:=?context.BindJSON(parms)??//?傳入值,解析無法修改?parms?內(nèi)容
    ????//?解析不會(huì)修改?parms?的內(nèi)容
    
    ????小結(jié)
    
    ????總之,context.BindJSON?需要一個(gè)指針類型的參數(shù),因此必須使用?&parms。
    */
    
    func?(o?OrderControllerStruct)?CreateOrder(context?*gin.Context)?{
    ????//name?:=?context.PostForm("name")
    ????//price?:=?context.PostForm("price")
    ????//?使用map接受json?數(shù)據(jù)
    ????parms?:=?make(map[string]interface{})
    ????//使用?Gin?的?BindJSON?方法解析?JSON?數(shù)據(jù)并將其綁定到?parms
    ????//?思考?這里?err?:=?context.BindJSON(&parms)?可以寫成?err?:=?context.BindJSON(parms)?嗎?
    ????//?不可以。
    
    ????err?:=?context.BindJSON(&parms)
    ????if?err?==?nil?{
    ???????common.Succeed(1,?context,?parms,?10,?"訂單創(chuàng)建成功")
    ????}
    ????//common.Succeed(1,?context,?name,?10,?price)
    }
    查看全部
  • 簡單示例
    
    func?(o?OrderControllerStruct)?CreateOrder(context?*gin.Context)?{
    ????name?:=?context.PostForm("name")
    ????price?:=?context.PostForm("price")
    ????common.Succeed(1,?context,?name,?10,?price)
    }
    curl?--location?'http://127.0.0.1:9999/order/create'?\
    --form?'name="小蛋糕"'?\
    --form?'price="100.00"'
    查看全部
  • package?controller
    
    import?(
    ????"github.com/gin-gonic/gin"
    ????"go-ranking/common"
    )
    
    type?UserControllerStruct?struct?{
    }
    
    func?(u?UserControllerStruct)?GetUserInfo(c?*gin.Context)?{
    ????common.Failed(4004,?c,?"沒有相關(guān)信息")
    }
    
    func?(u?UserControllerStruct)?CreateUser(context?*gin.Context)?{
    ????common.Succeed(1,?context,?nil,?1,?"創(chuàng)建成功")
    }
    
    func?(u?UserControllerStruct)?DelUser(context?*gin.Context)?{
    ????common.Succeed(1,?context,?nil,?1,?"刪除成功")
    }
    
    func?(u?UserControllerStruct)?UpdateUser(context?*gin.Context)?{
    ????common.Failed(0,?context,?"刪除失敗")
    }
    package?router
    
    import?(
    ????"github.com/gin-gonic/gin"
    ????"go-ranking/controller"
    )
    
    //?Router?路由,這里方法名要大寫,因?yàn)橐獙?dǎo)出出去,在別的包里使用
    func?Router()?*gin.Engine?{
    ????r?:=?gin.Default()
    ????userGroup?:=?r.Group("/user")
    ????//?注意這里,他們不是一起的。
    ????{
    ???????userGroup.GET("/info",?controller.UserControllerStruct{}.GetUserInfo)
    ???????//userGroup.GET("/list",?func(c?*gin.Context)?{
    ???????//?c.JSON(http.StatusOK,?gin.H{"message":?"list"})
    ???????//})
    ???????userGroup.GET("/create",?controller.UserControllerStruct{}.CreateUser)
    
    ???????//userGroup.DELETE("/delete",?controller.DelUser)
    ???????userGroup.GET("/delete",?controller.UserControllerStruct{}.DelUser)
    
    ???????userGroup.PUT("/put",?controller.UserControllerStruct{}.UpdateUser)
    ????}
    ????return?r
    }
    package?common
    
    import?(
    ????"github.com/gin-gonic/gin"
    ????"net/http"
    )
    
    //?json返回的數(shù)據(jù)結(jié)構(gòu)
    type?JsonStruct?struct?{
    ????Code??int?????????`json:"code"`
    ????Data??interface{}?`json:"data"`
    ????Count?int64???????`json:"count"`
    ????Msg???interface{}?`json:"msg"`
    }
    
    type?ErrorStruct?struct?{
    ????Code?int?????????`json:"code"`
    ????Msg??interface{}?`json:"msg"`
    }
    
    func?Succeed(code?int,?c?*gin.Context,?data?interface{},?count?int64,?msg?interface{})?{
    ????json?:=?&JsonStruct{code,?data,?count,?msg}
    ????c.JSON(http.StatusOK,?json)
    }
    
    func?Failed(code?int,?c?*gin.Context,?msg?interface{})?{
    ????json?:=?&ErrorStruct{code,?msg}
    ????c.JSON(http.StatusOK,?json)
    }
    
    //func?Demo(code?int,?c?*gin.Context,?msg?interface{})?{
    //??json?:=?&JsonStruct{Code:?code,?Msg:?msg}
    //??c.JSON(http.StatusOK,?json)
    //}
    
    /**
    補(bǔ)充一個(gè)?關(guān)于?類型的值實(shí)例?和?類型的指針實(shí)例?區(qū)別、
    
    &JsonStruct{}?和?JsonStruct{}?在?Go?中的區(qū)別在于它們的內(nèi)存分配和類型。
    ????1.?JsonStruct{}:表示創(chuàng)建一個(gè)?JsonStruct?類型的值實(shí)例。
    ???????直接使用?JsonStruct{}?會(huì)在棧上分配一個(gè)?JsonStruct?類型的值,表示這個(gè)結(jié)構(gòu)體的值本身。
    ???????當(dāng)你使用?JsonStruct{}?時(shí),得到的是一個(gè)結(jié)構(gòu)體的副本。
    ????2.?&JsonStruct{}:表示創(chuàng)建一個(gè)?JsonStruct?類型的指針實(shí)例。
    ???????使用?&JsonStruct{}?會(huì)在堆上分配結(jié)構(gòu)體值并返回一個(gè)指向該值的指針(類型為?*JsonStruct)。
    ???????返回的指針允許你直接修改結(jié)構(gòu)體字段,而不會(huì)產(chǎn)生副本。
    
    示例
    
    假設(shè)有以下?JsonStruct?結(jié)構(gòu)體:
    
    type?JsonStruct?struct?{
    ????Code?int
    ????Msg??string
    }
    
    然后我們來對(duì)比兩種創(chuàng)建方式的不同:
    
    //?創(chuàng)建一個(gè)?JsonStruct?值實(shí)例
    jsonValue?:=?JsonStruct{Code:?200,?Msg:?"Success"}
    
    //?創(chuàng)建一個(gè)?JsonStruct?指針實(shí)例
    jsonPointer?:=?&JsonStruct{Code:?200,?Msg:?"Success"}
    
    使用場景
    
    ???????值實(shí)例?(JsonStruct{}):
    ???????適合在不需要對(duì)原始數(shù)據(jù)進(jìn)行修改或傳遞副本時(shí)使用。
    ???????不適合處理大量數(shù)據(jù),因?yàn)槊看蝹鬟f時(shí)都會(huì)復(fù)制結(jié)構(gòu)體的數(shù)據(jù)。
    ???????指針實(shí)例?(&JsonStruct{}):
    ???????適合在需要修改結(jié)構(gòu)體字段,或在函數(shù)中傳遞以節(jié)省內(nèi)存時(shí)使用。
    ???????對(duì)于較大結(jié)構(gòu)體,指針實(shí)例更高效,因?yàn)椴恍枰獜?fù)制整個(gè)結(jié)構(gòu)體。
    
    示例:在函數(shù)中傳遞
    
    func?modifyValue(js?JsonStruct)?{
    ????js.Code?=?500?//?只會(huì)修改副本
    }
    
    func?modifyPointer(js?*JsonStruct)?{
    ????js.Code?=?500?//?修改指針?biāo)赶虻脑紨?shù)據(jù)
    }
    
    func?main()?{
    ????jsValue?:=?JsonStruct{Code:?200,?Msg:?"Original"}
    ????modifyValue(jsValue)
    ????fmt.Println(jsValue.Code)?//?輸出:?200?(未修改)
    
    ????jsPointer?:=?&JsonStruct{Code:?200,?Msg:?"Original"}
    ????modifyPointer(jsPointer)
    ????fmt.Println(jsPointer.Code)?//?輸出:?500?(已修改)
    }
    
    總結(jié)
    
    ???????JsonStruct{}:創(chuàng)建結(jié)構(gòu)體的值實(shí)例,每次使用時(shí)生成一個(gè)副本。
    ???????&JsonStruct{}:創(chuàng)建結(jié)構(gòu)體的指針實(shí)例,直接操作原始數(shù)據(jù),更節(jié)省內(nèi)存。
    */
    查看全部
  • package?common
    
    import?(
    ????"github.com/gin-gonic/gin"
    ????"net/http"
    )
    
    //?json返回的數(shù)據(jù)結(jié)構(gòu)
    type?JsonStruct?struct?{
    ????Code??int?????????`json:"code"`
    ????Data??interface{}?`json:"data"`
    ????Count?int64???????`json:"count"`
    ????Msg???interface{}?`json:"msg"`
    }
    
    func?Succeed(code?int,?c?*gin.Context,?data?interface{},?count?int64,?msg?interface{})?{
    ????json?:=?&JsonStruct{code,?data,?count,?msg}
    ????c.JSON(http.StatusOK,?json)
    }
    
    func?failed(code?int,?c?*gin.Context,?msg?interface{})?{
    ????json?:=?&JsonStruct{Code:?code,?Msg:?msg}
    ????c.JSON(http.StatusOK,?json)
    
    }
    
    /**
    補(bǔ)充一個(gè)?關(guān)于?類型的值實(shí)例?和?類型的指針實(shí)例?區(qū)別、
    
    &JsonStruct{}?和?JsonStruct{}?在?Go?中的區(qū)別在于它們的內(nèi)存分配和類型。
    ????1.?JsonStruct{}:表示創(chuàng)建一個(gè)?JsonStruct?類型的值實(shí)例。
    ???????直接使用?JsonStruct{}?會(huì)在棧上分配一個(gè)?JsonStruct?類型的值,表示這個(gè)結(jié)構(gòu)體的值本身。
    ???????當(dāng)你使用?JsonStruct{}?時(shí),得到的是一個(gè)結(jié)構(gòu)體的副本。
    ????2.?&JsonStruct{}:表示創(chuàng)建一個(gè)?JsonStruct?類型的指針實(shí)例。
    ???????使用?&JsonStruct{}?會(huì)在堆上分配結(jié)構(gòu)體值并返回一個(gè)指向該值的指針(類型為?*JsonStruct)。
    ???????返回的指針允許你直接修改結(jié)構(gòu)體字段,而不會(huì)產(chǎn)生副本。
    
    示例
    
    假設(shè)有以下?JsonStruct?結(jié)構(gòu)體:
    
    type?JsonStruct?struct?{
    ????Code?int
    ????Msg??string
    }
    
    然后我們來對(duì)比兩種創(chuàng)建方式的不同:
    
    //?創(chuàng)建一個(gè)?JsonStruct?值實(shí)例
    jsonValue?:=?JsonStruct{Code:?200,?Msg:?"Success"}
    
    //?創(chuàng)建一個(gè)?JsonStruct?指針實(shí)例
    jsonPointer?:=?&JsonStruct{Code:?200,?Msg:?"Success"}
    
    使用場景
    
    ???????值實(shí)例?(JsonStruct{}):
    ???????適合在不需要對(duì)原始數(shù)據(jù)進(jìn)行修改或傳遞副本時(shí)使用。
    ???????不適合處理大量數(shù)據(jù),因?yàn)槊看蝹鬟f時(shí)都會(huì)復(fù)制結(jié)構(gòu)體的數(shù)據(jù)。
    ???????指針實(shí)例?(&JsonStruct{}):
    ???????適合在需要修改結(jié)構(gòu)體字段,或在函數(shù)中傳遞以節(jié)省內(nèi)存時(shí)使用。
    ???????對(duì)于較大結(jié)構(gòu)體,指針實(shí)例更高效,因?yàn)椴恍枰獜?fù)制整個(gè)結(jié)構(gòu)體。
    
    示例:在函數(shù)中傳遞
    
    func?modifyValue(js?JsonStruct)?{
    ????js.Code?=?500?//?只會(huì)修改副本
    }
    
    func?modifyPointer(js?*JsonStruct)?{
    ????js.Code?=?500?//?修改指針?biāo)赶虻脑紨?shù)據(jù)
    }
    
    func?main()?{
    ????jsValue?:=?JsonStruct{Code:?200,?Msg:?"Original"}
    ????modifyValue(jsValue)
    ????fmt.Println(jsValue.Code)?//?輸出:?200?(未修改)
    
    ????jsPointer?:=?&JsonStruct{Code:?200,?Msg:?"Original"}
    ????modifyPointer(jsPointer)
    ????fmt.Println(jsPointer.Code)?//?輸出:?500?(已修改)
    }
    
    總結(jié)
    
    ???????JsonStruct{}:創(chuàng)建結(jié)構(gòu)體的值實(shí)例,每次使用時(shí)生成一個(gè)副本。
    ???????&JsonStruct{}:創(chuàng)建結(jié)構(gòu)體的指針實(shí)例,直接操作原始數(shù)據(jù),更節(jié)省內(nèi)存。
    */
    查看全部
  • package?main
    
    import?(
    ????"go-ranking/router"
    )
    
    func?main()?{
    ????r?:=?router.Router()
    ????
    ????r.Run(":9999")
    }
    package?router
    
    import?(
    ????"github.com/gin-gonic/gin"
    ????"net/http"
    )
    
    //?Router?路由,這里方法名要大寫,因?yàn)橐獙?dǎo)出出去,在別的包里使用
    func?Router()?*gin.Engine?{
    ????r?:=?gin.Default()
    ????userGroup?:=?r.Group("/user")
    ????//?注意這里,他們不是一起的。
    ????{
    ???????userGroup.GET("/list",?func(c?*gin.Context)?{
    ??????????c.JSON(http.StatusOK,?gin.H{"message":?"list"})
    ???????})
    
    ???????userGroup.POST("/create",?func(c?*gin.Context)?{
    ??????????c.JSON(http.StatusOK,?gin.H{"message":?"create"})
    ???????})
    
    ???????userGroup.DELETE("/delete",?func(c?*gin.Context)?{
    ??????????c.JSON(http.StatusOK,?gin.H{"message":?"delete"})
    ???????})
    
    ???????userGroup.PATCH("/patch",?func(c?*gin.Context)?{
    ??????????c.JSON(http.StatusOK,?gin.H{"message":?"patch?"})
    ???????})
    ???????userGroup.PUT("/put",?func(c?*gin.Context)?{
    ??????????c.JSON(http.StatusOK,?gin.H{"message":?"put?"})
    ???????})
    ????}
    ????return?r
    }


    對(duì)核心代碼做一些解釋

    ? 函數(shù)聲明:

    ? func Router() 表示定義一個(gè)名為 Router 的函數(shù)。

    ? 返回值 *gin.Engine 表示這個(gè)函數(shù)返回一個(gè)指向 gin.Engine 實(shí)例的指針,gin.Engine 是 Gin 框架的核心路由器。

    ? *gin.Engine:

    ? gin.Engine 是 Gin 的核心類型,代表整個(gè) HTTP 路由器和中間件系統(tǒng)。

    ? 通過 gin.Engine 實(shí)例,可以定義應(yīng)用的路由、請(qǐng)求處理邏輯、中間件等。

    查看全部
  • 還是比較有幫助的,點(diǎn)個(gè)贊

    查看全部
    0 采集 收起 來源:導(dǎo)學(xué)

    2024-04-07

  • defer:延遲執(zhí)行,先defer的后執(zhí)行

    panic 程序直接終止

    recover在defer中執(zhí)行,讓程序恢復(fù)正常的狀態(tài)去執(zhí)行

    查看全部
  • 3-4章節(jié)大綱課后復(fù)習(xí)大綱

    1. 如何獲取get方式xxx?id=xxx&name=xxx中的id和name

    2. 如何獲取post方式請(qǐng)求的body中的表單對(duì)象

    3. 如何獲取post方式請(qǐng)求的body中的json對(duì)象(map和結(jié)構(gòu)體兩種方式獲取)

    查看全部
  • 記錄一下,很有幫助655479660001416009720608.jpg
    查看全部
    1 采集 收起 來源:導(dǎo)學(xué)

    2023-11-15

  • 66666666666666

    查看全部
  • 產(chǎn)品經(jīng)理不一定要有獨(dú)立編碼能力,但是適當(dāng)了解一些技術(shù)原理,不至于提出“App的主題顏色根據(jù)手機(jī)外殼的顏色來自動(dòng)調(diào)整”的這種需求了解一些常用的專業(yè)技術(shù)術(shù)語,可以更好的和程序員溝通協(xié)作,當(dāng)程序員討論構(gòu)建某個(gè)功能時(shí),咱們至少要能聽懂他們?cè)谥v什么,問題出在哪里。

    一、懂技術(shù)的產(chǎn)品經(jīng)理有三大優(yōu)勢(shì)

    1. 懂技術(shù)的產(chǎn)品經(jīng)理,和開發(fā)的溝通更順暢

    聽得懂技術(shù)專業(yè)術(shù)語,明白技術(shù)實(shí)現(xiàn)原理,在傳遞需求時(shí)更容易讓技術(shù)同學(xué)理解,達(dá)成共識(shí)。

    撰寫PRD或需求評(píng)審時(shí),知道技術(shù)關(guān)心什么,對(duì)技術(shù)細(xì)節(jié)的闡述更加到位全面。

    線上有異常時(shí),快速定位問題范圍,找到相應(yīng)的技術(shù)同事,加速問題的修復(fù)。

    查看全部
  • 記錄下來

    查看全部
    0 采集 收起 來源:導(dǎo)學(xué)

    2023-08-12

  • 還可以

    查看全部
    0 采集 收起 來源:導(dǎo)學(xué)

    2023-08-12

  • 不錯(cuò)

    查看全部
    0 采集 收起 來源:導(dǎo)學(xué)

    2023-08-12

  • 1

    查看全部
    0 采集 收起 來源:導(dǎo)學(xué)

    2023-07-27

首頁上一頁12下一頁尾頁

舉報(bào)

0/150
提交
取消
課程須知
會(huì)Go語言基礎(chǔ)語法
老師告訴你能學(xué)到什么?
1.快速搭建Gin開發(fā)框架,可以在企業(yè)中開發(fā)項(xiàng)目,為小伙伴在企業(yè)中使用做好基礎(chǔ) 2.能夠使用Gin框架開發(fā)項(xiàng)目 3.了解助力榜實(shí)現(xiàn)方案,以及通過redis優(yōu)化的方案 4.了解Go語言線上部署 5.利用寶塔搭建web服務(wù)器

微信掃碼,參與3人拼團(tuán)

微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對(duì)慕課網(wǎng)的支持!