日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang 的Gin框架入门教学

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang 的Gin框架入门教学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習Golang差不多有一個星期時間,開始自己做點小功能,練練手。

Gin 介紹

Gin 是一個 Golang 寫的 web 框架,具有高性能的優點,,基于 httprouter, 它提供了類似martini但更好性能(路由性能約快40倍)的API服務。 官方地址:https://github.com/gin-gonic/gin

安裝框架

配置好GOPATH,建議自己在GOPATH建個項目,這里我以aze.org作為項目目錄。

$ go get github.com/gin-gonic/gin

安裝mysql驅動

$ go get github.com/go-sql-driver/mysql

組織項目

經過上面的model和handler的分離,代碼結構變得更加清晰,可是我們還是單文件。下一步將進行封裝不同的包。

數據庫處理

在項目根目錄創建下面三個文件夾,apis,databases和models,并在文件夾內創建文件。此時我們的目錄結果如下

apis文件夾存放我們的handler函數,models文件夾用來存放我們的數據模型。

mysql.go:

package databaseimport ("database/sql"_ "github.com/go-sql-driver/mysql""log" )var SqlDB *sql.DBfunc init() {var err errorSqlDB, err = sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test?parseTime=true")if err != nil {log.Fatal(err.Error())}err = SqlDB.Ping()if err != nil {log.Fatal(err.Error())} }

因為我們需要在別的地方使用SqlDB這個變量,因此依照golang的習慣,變量名必須大寫開頭。

數據model封裝

修改models文件夾下的person.go,把對應的Person結構及其方法移到這里:

package modelsimport ("log"db "newland/database" )type Person struct {Id int `json:"id" form:"id"`FirstName string `json:"first_name" form:"first_name"`LastName string `json:"last_name" form:"last_name"` }func (p *Person) AddPerson() (id int64, err error) {rs, err := db.SqlDB.Exec("INSERT INTO person(first_name, last_name) VALUES (?, ?)", p.FirstName, p.LastName)if err != nil {return}id, err = rs.LastInsertId()return }func (p *Person) GetPersons() (persons []Person, err error) {persons = make([]Person, 0)rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person")defer rows.Close()if err != nil {return}for rows.Next() {var person Personrows.Scan(&person.Id, &person.FirstName, &person.LastName)persons = append(persons, person)}if err = rows.Err(); err != nil {return}return } ..............

handler

然后把具體的handler函數封裝到api包中,因為handler函數要操作數據庫,所以會引用model包

package apisimport ("net/http""log""fmt""github.com/gin-gonic/gin". "aze.org/models" )func IndexApi(c *gin.Context) {c.String(http.StatusOK, "It works") }func AddPersonApi(c *gin.Context) {firstName := c.Request.FormValue("first_name")lastName := c.Request.FormValue("last_name")p := Person{FirstName: firstName, LastName: lastName}ra, err := p.AddPerson()if err != nil {log.Fatalln(err)}msg := fmt.Sprintf("insert successful %d", ra)c.JSON(http.StatusOK, gin.H{"msg": msg,}) }......

路由

最后就是把路由抽離出來,修改router.go,我們在路由文件中封裝路由函數

package mainimport ("github.com/gin-gonic/gin". "aze.orgd/apis" )func initRouter() *gin.Engine {router := gin.Default()router.GET("/", IndexApi)router.POST("/person", AddPersonApi)router.GET("/persons", GetPersonsApi)router.GET("/person/:id", GetPersonApi)router.PUT("/person/:id", ModPersonApi)router.DELETE("/person/:id", DelPersonApi)return router }

app入口

最后就是main函數的app入口,將路由導入,同時我們要在main函數結束的時候,關閉全局的數據庫連接池:

main.go

package mainimport (db "aze.org/database" )func main() {defer db.SqlDB.Close()router := initRouter()router.Run(":8000") }

此時運行項目,不能像之前簡單的使用go run main.go,因為包main包含main.go和router.go的文件,因此需要運行go run *.go命令編譯運行。如果是最終編譯二進制項目,則運行go build -o app,生成app文件直接./app就可以運行項目了。

總結

1.通過上述的實踐,我們了解了Gin框架創建基本的的restful服務。
2.golang 關鍵字不多,但是語法還是挺多的,需要認真學習,打好基礎。
3.多看優秀的框架,再進行思考有沒有更好的寫法。

參考教程:

Gin框架 詳細文檔地址:https://godoc.org/github.com/gin-gonic/gin

項目地址:

https://github.com/onebig32/gin-learn.git

轉載于:https://blog.51cto.com/onebig/2165621

總結

以上是生活随笔為你收集整理的Golang 的Gin框架入门教学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。