ジンフレームワーク学習 (1)

0.序文

本連載で使用した開発環境は以下のとおりです。

  • ゴーランド
  • 1.17.1に行く

このセクションでは、まずプロジェクトで gin フレームワークのインポートを完了し、テスト用の helleworld を作成し、次に gorm パッケージをインポートし、gorm と gin を組み合わせて簡単な登録ロジックを開発しました。

1. 作業ディレクトリを作成する

goland で gin_test プロジェクトを作成し、main.go ファイルを作成します。

ここに画像の説明を挿入します

2. GIN フレームワークをインストールしてテストする

2.1 gin パッケージをインストールする

前のセクションで作成した gin_test ディレクトリに移動し、次のコマンドを入力します。

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

パッケージがブロックされているため、ここでタイムアウト エラーが発生する可能性があることに注意してください。この問題を解決するために GO 環境を構成できます。詳細については、ブロガーの他の記事 go moduleconfiguration を参照してください

インストール後、go.mod に多くの gin 依存関係が表示されます。

2.2 テスト用に helloworld を作成する

main.go ファイルに次のコードを入力します。

package main
import "github.com/gin-gonic/gin"

func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}

実行後、http://localhost:8080/ping と入力して Pong メッセージを確認します。

3. gorm パッケージをインストールしてテストする

gin_test ディレクトリで次のコマンドを実行します。

go get -u gorm.io/gorm

ここでは mysql を使用しているため、次のパッケージも含める必要があります。

go get gorm.io/driver/mysql

テスト用に次の単純なコードを作成しました。このコードは、データベース内のテーブルにマップされるユーザー構造を定義し、追加、削除、変更、およびクエリ操作がこのテーブルに基づいて実行されます。

package main

import (
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

//定义结构体到数据库的映射,设置name为非空且唯一
type User struct {
   gorm.Model
    Name string `gorm:"not null;unique"`
   Telephone string
   Password string
}

func main() {
   db:=InitDb()
   //自动创建数据表
   db.AutoMigrate(&User{})
   db.Create(&User{Name: "yzy",
      Password: "123456"})
   var user User
   fmt.Print(user)
   fmt.Printf("----------\n")
   db.First(&user,"name=?","yzy")
   fmt.Print(user)
   fmt.Printf("----------\n")

}

func InitDb() *gorm.DB{
//一些数据库的参数
   username:="root"
   password:="123456"
   host:="localhost"
   port:="3306"
   charset:="utf8"
   database:="test" //使用test数据库

   dns:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
      username,
      password,
      host,
      port,
      database,
      charset)
    //后面还可以传入一些对数据库特殊的定义
   db,err:=gorm.Open(mysql.Open(dns))
   if err != nil {
      panic("failed to connect database,err:"+err.Error())
   }
   return db

}

実行する前に、データベース サービスを開始し、コードで指定されたデータベースを作成することを忘れないでください。

net start mysql
//进入mysql
mysql -u root -p
//创建数据库
creat database test

実行後にデータベースにクエリを実行する

select * from users;

4. 登録ロジックの作成

コードは以下のように表示されます。

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
)

type User struct {
   gorm.Model
   Name string
   Telephone string `gorm:"unique;not null"`
   Password string `gorm:"not null"`
}

func main(){
   db:=InitDb()
   db.AutoMigrate(&User{})
   router:=gin.Default()
   router.GET("/register",Register)

   router.Run()
}


func Register(c *gin.Context){
   db:=InitDb()
//获取数据
   name:=c.Query("name")
   password:=c.Query("password")
   telephone:=c.Query("telephone")
   if len(telephone)!=11{
   	c.JSON(400,gin.H{
   		"error":"the telephone is not correct",
   	})
   	return
   }
//判断
   if isTelephoneExist(db,telephone){
   c.JSON(400,gin.H{
   	"error":"the telephone is already exit",
   		})
   	return
   }
   //插入数据
   db.Create(&User{Name: name,Password: password,Telephone: telephone})
   c.JSON(200,gin.H{
   	"msg":"succeed",
   })
   return
}

func isTelephoneExist(db *gorm.DB,telephone string)bool{
   var user User
   db.Where("password=?",telephone).First(&user)
   if user.ID!=0{
   	return true
   }else{
   	return false
   }
}

func InitDb()*gorm.DB{
   username:="root"
   password:="123456"
   database:="gin_demo"
   charset:="utf8"
   port:="3306"
   host:="localhost"
   dns:=fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True",
   	username,
   	password,
   	host,
   	port,
   	database,
   	charset)

   db,err:=gorm.Open(mysql.Open(dns))
   if err != nil {
   	panic("can't connect to the mysql"+err.Error())
   }
   return db
}

6. まとめ

今回実装した小規模なデモはすべての機能が 1 つのパッケージに書かれていますが、ビジネスが拡大すると、次にプロジェクトのアーキテクチャを再設計するため、このようなアーキテクチャは非常に肥大化して保守が困難になります。

おすすめ

転載: blog.csdn.net/doreen211/article/details/129148590
おすすめ