GoWeb项⽬搭建-Gin+GORM连接MySQL数据库1、项⽬开发准备
Go版本:1.16.2
开发⼯具:GoLand
手机mysql安装配置教程使⽤框架:Gin
ORM框架:GORM
数据库:MySQL
2、项⽬结构
swap是什么意思英语
3、项⽬环境准备:Gin和GORM
1、开启GO111MODULE并修改Go代理(⽤下⾯两个命令把下图中标出的两个地⽅修改成跟我⼀样的配置)
go env -w GO111MODULE=on
go env -w GOPROXY=goproxy,direct(修改这个是因为原有的⾕歌代理在国内不⾏)
2、安装Gin(在GoLand⼯具命令⾏下执⾏以下命令)
go get -u github/gin-gonic/gin
【注意:这⼀步执⾏完后,它会⾃动在go.mod⽂件中引⼊响应的依赖】
3、安装Gorm
go get -u gorm.io/gorm
4、安装mysql数据库驱动
go get -u gorm.io/driver/mysql
4、项⽬源码
//go.mod⽂件源码
module Gin_demo
go 1.16
//通过命令【go get -u github/gin-gonic/gin】安装gin框架
//引⼊gin框架后,会⾃动在这⾥引⼊依赖
require (
github/gin-gonic/gin v1.7.2// indirect
github/go-playground/validator/v10 v10.6.1// indirect
github/golang/protobuf v1.5.2// indirect
github/json-iterator/go v1.1.11// indirect
github/leodido/go-urn v1.2.1// indirect
github/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd github/modern-go/reflect2 v1.0.1// indirect
github/ugorji/go v1.2.6// indirect
gopkg.in/yaml.v2 v2.4.0// indirect
gorm.io/driver/mysql v1.1.0// indirect
gorm.io/gorm v1.21.10// indirect
)
< ⽂件源码
package main
import (
"fmt"
"github/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"io/ioutil"
"log"
"math/rand"
"net/http"
"time"
)
//此⽅法在该项⽬中未⽤,不⽤管
func sayHello(w http.ResponseWriter, r *http.Request) {
b, _ := ioutil.ReadFile("./")
_, _ = fmt.Fprintln(w, string(b))
}
type User struct {
gorm.Model
//'gorm:"type:varchar(20);not null"'
Name string
Phone string
Password string
}
func main() {
db := InitDB()
//传统的Web服务写法
//http.HandleFunc("/hello", sayHello)
//err := http.ListenAndServe(":9090", nil)
//if err != nil {
// fmt.Printf("http server faile,err:%v\n", err)
// return
//}
//fmt.Println("项⽬启动成功")
/
/利⽤Gin框架的web写法,来源于gin官⽹
r := gin.Default()
r.POST("/api/auth/register", func(c *gin.Context) {
//获取参数
name := c.PostForm("name")
phone := c.PostForm("phone")
password := c.PostForm("password")
//数据验证
if len(phone) != 11 {
c.JSON(http.StatusUnprocessableEntity, gin.H{"code": 422,
"msg": "⼿机号格式不正确"})
return
}
if len(password) < 6 {
c.JSON(http.StatusUnprocessableEntity, gin.H{"code": 422,
"msg": "密码不能少于6位"})
return
ztree默认展开}
25减13用补码运算if len(name) == 0 {
name = RandomString(10)
return
}
log.Print(name, phone, password)
//判断⼿机号是否存在
if isPhoneExist(db, phone) {solr的使用
c.JSON(http.StatusUnprocessableEntity, gin.H{"code": 422,
"msg": "⽤户已存在,不能注册"})
return
}
//创建新⽤户
newUser := User{
Name: name,
Phone: phone,
Password: password,
}
db.Create(&newUser)
//返回结果
c.JSON(200, gin.H{
"message": "注册成功",
})
})
_ = r.Run() // listen and serve on 0.0.0.0:8080
panic(r.Run())
}
func isPhoneExist(db *gorm.DB, phone string) bool {
var user User
db.Where("phone = ?", phone).First(&user)
if user.ID != 0 {
return true
}
return false
}
//随机产⽣英⽂字符,可设定长度
func RandomString(n int) string {
var letters =[]byte("asdfghjklzxcvbnmqwertyuiopASDFGHJKLZXCVBNMQWERTYUIOP") result := make([]byte, n)
rand.Seed(time.Now().Unix())
for i := range result {
result[i] = letters[rand.Intn(len(letters))]
}
return string(result)
}
func InitDB() *gorm.DB {
//前提是你要先在本机⽤Navicat创建⼀个名为go_db的数据库
host := "localhost"
port := "3306"
database := "go_db"
username := "root"
password := "123456"
java设计模式课后答案charset := "utf8"
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
username,
password,
host,
port,
database,
charset)
//这⾥ gorm.Open()函数与之前版本的不⼀样,⼤家注意查看官⽅最新gorm版本的⽤法 db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("Error to Db connection, err: " + err.Error())
}
//这个是gorm⾃动创建数据表的函数。它会⾃动在数据库中创建⼀个名为users的数据表 _ = db.AutoMigrate(&User{})
return db
}
5、⽤Postman测试接⼝,按照代码中的参数传⼊测试
《全⽂完》
有不懂的⼩伙伴欢迎留⾔交流!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论