package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"strings"
"os"
"github.com/gin-gonic/gin"
"github.com/go-xorm/xorm"
"xorm.io/core"
)
// 连接数据库参数
const (
userName = "root"
password = "123456"
ip = "localhost"
port = "3306"
dbName = "users"
)
var DB *sql.DB
var engine *xorm.Engine
// 连接数据库
func initDB() {
// 构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
// 打开数据库 ("驱动名",连接)
DB,_ = sql.Open("mysql",path)
// 设置数据库最大连接数
DB.SetConnMaxLifetime(100)
// 设置数据库最大闲置数
DB.SetMaxIdleConns(10)
// 验证连接
if err := DB.Ping(); err != nil {
fmt.Println("连接数据库失败")
return
}
fmt.Println("连接数据库成功")
}
func initDBXorm() {
// 构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
var err error
path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
engine, err = xorm.NewEngine("mysql", path)
if err != nil {
fmt.Println("创建engine失败")
return
}
engine.ShowSQL(true)
engine.SetTableMapper(core.SnakeMapper{})
if err := engine.Ping(); err != nil {
fmt.Println("连接数据库失败")
return
}
fmt.Println("连接数据库成功")
}
// User
type User struct {
id int //id
username string //用户名
password string //密码
tel string //手机号
}
type User1 struct {
username string //用户名
password string //密码
}
type passWd struct {
password string
}
// Xorm Struct
type Users struct {
Username string `xorm:"VARCHAR(255)"`
Password string `xorm:"VARCHAR(255)"`
}
// usage
func usage(){
fmt.Println("Usage:")
fmt.Println(" login: deomo 1 username password")
fmt.Println(" register: deomo 2 username password")
fmt.Println(" changePassword: deomo 3 username password newpassword")
}
// get Args
func getArgs(){
if len(os.Args) < 2 {
usage()
} else {
/*
for index, arg := range os.Args {
fmt.Printf("args[%d]=%v\n", index, arg)
}
*/
args := os.Args
if args[1] == "1"{
fmt.Println(" login: deomo 1 username password")
fmt.Println("username =", args[2])
fmt.Println("password =", args[3])
var u User1
u.username = args[2]
u.password = args[3]
userLoginX(u)
}else if args[1] == "2"{
fmt.Println(" register: deomo 2 username password")
fmt.Println("username =", args[2])
fmt.Println("password =", args[3])
var u User1
u.username = args[2]
u.password = args[3]
userRegisterX(u)
}else if args[1] == "3"{
fmt.Println(" changePassword: deomo 3 username password newpassword")
fmt.Println("username =", args[2])
fmt.Println("password =", args[3])
fmt.Println("newpassword =", args[4])
var u User1
var u2 passWd
u.username = args[2]
u.password = args[3]
u2.password = args[4]
changePasswordX(u, u2)
}else if args[1] == "4"{
fmt.Println(" changePassword: deomo 4 username password")
fmt.Println("username =", args[2])
fmt.Println("password =", args[3])
var u User1
u.username = args[2]
u.password = args[3]
deleteUsernameX(u)
}else {
usage()
}
}
}
// @userLogin
func userLogin(c *gin.Context) {
userName := c.Request.URL.Query().Get("username")
passWord := c.Request.URL.Query().Get("password")
//查询列表
rows,err := DB.Query("SELECT * FROM users")
if err != nil {
fmt.Println("查询失败")
}
var s User
for rows.Next() {
err = rows.Scan(&s.username, &s.password)
if err != nil {
fmt.Println(err)
}
}
if userName != s.username {
// 无此用户
c.JSON(200,gin.H{
"success":false,
"code":400,
"msg":"无此用户",
})
} else {
// 获取当前用户名密码
us,_ := DB.Query("SELECT password FROM voro_user where username='" + userName + "'")
for us.Next(){
var u passWd
err = us.Scan(&u.password)
if err != nil {
fmt.Println(err)
}
// 密码是否匹配
if passWord != u.password{
c.JSON(200,gin.H{
"success":false,
"code":400,
"msg":"密码错误",
})
} else {
c.JSON(200,gin.H{
"success":true,
"code":200,
"msg":"登录成功",
})
}
}
}
rows.Close()
}
func userLogin1(u User1) {
userName := u.username
passWord := u.password
//查询列表
rows,err := DB.Query("SELECT * FROM users")
if err != nil {
fmt.Println("查询失败")
}
var s User1
for rows.Next() {
err = rows.Scan(&s.username, &s.password)
if err != nil {
fmt.Println(err)
}
if userName == s.username {
break
}
}
if userName != s.username {
// 无此用户
fmt.Println("No such user!")
} else {
// 获取当前用户名密码
us,_ := DB.Query("SELECT password FROM users where username='" + userName + "'")
for us.Next(){
var u passWd
err = us.Scan(&u.password)
if err != nil {
fmt.Println(err)
}
// 密码是否匹配
if passWord != u.password{
fmt.Println("password error")
} else {
fmt.Println("login success")
}
}
}
rows.Close()
}
func userLoginX(u User1) {
userName := u.username
passWord := u.password
//查询列表
st2 := new(Users)
result,err := engine.Where("username=?", userName).Get(st2)
fmt.Println("查询结果为", result)
if err != nil {
fmt.Println(err)
}
if userName != st2.Username {
// 无此用户
fmt.Println("No such user!")
} else {
// 密码是否匹配
if passWord != st2.Password{
fmt.Println("password error")
} else {
fmt.Println("login success")
}
}
}
func userLoginG(c *gin.Context) {
userName := c.Request.URL.Query().Get("username")
passWord := c.Request.URL.Query().Get("password")
//查询列表
st2 := new(Users)
result,err := engine.Where("username=?", userName).Get(st2)
fmt.Println("查询结果为", result)
if err != nil {
fmt.Println(err)
}
if userName != st2.Username {
// 无此用户
c.JSON(200,gin.H{
"success":false,
"code":400,
"msg":"无此用户",
})
} else {
// 密码是否匹配
if passWord != st2.Password{
c.JSON(200,gin.H{
"success":false,
"code":400,
"msg":"密码错误",
})
} else {
c.JSON(200,gin.H{
"success":true,
"code":200,
"msg":"登录成功",
})
}
}
}
// @userRegister
func userRegister(c *gin.Context){
userName := c.Request.URL.Query().Get("username")
passWord := c.Request.URL.Query().Get("password")
userTel := c.Request.URL.Query().Get("tel")
//查询列表
rows,err := DB.Query("SELECT * FROM voro_user")
if err != nil {
fmt.Println("查询失败")
}
//遍历返回结果
for rows.Next() {
var s User
err = rows.Scan(&s.id,&s.username,&s.password,&s.tel)
if err != nil{
fmt.Println(err)
}
fmt.Println(s.username)
if userName != s.username{
// 执行插入
result, err := DB.Exec("INSERT INTO voro_user(username,password,tel)VALUES (?,?,?)",userName,passWord,userTel)
if err != nil {
fmt.Println("执行失败")
return
} else {
rows,_ := result.RowsAffected()
if rows != 1 {
c.JSON(200,gin.H{
"success":false,
})
} else {
c.JSON(200,gin.H{
"success":true,
"username":userName,
"tel":userTel,
})
}
}
} else {
fmt.Println("用户名已被注册")
c.JSON(200,gin.H{
"code":400,
"success":false,
"msg":"用户名已被注册",
})
}
}
rows.Close()
}
func userRegister1(u User1){
userName := u.username
passWord := u.password
//查询列表
rows,err := DB.Query("SELECT * FROM users")
if err != nil {
fmt.Println("查询失败")
}
//遍历返回结果
var s User1
for rows.Next() {
err = rows.Scan(&s.username, &s.password)
if err != nil {
fmt.Println(err)
}
//fmt.Println(s.username)
if userName == s.username {
break
}
}
if userName == s.username {
fmt.Println("Already has one exsi