Golang 实现登录注册小程序
例一
main.go
package main
import (
"dev_code/user_login/tool"
"fmt"
)
var (
n int
decision string
price float64
count [4]int
exec string
userManagement = map[string]string{}
passManagement = map[string]string{}
userManagement1 = map[string]string{}
passManagement1 = map[string]string{}
)
func main() {
// 注册
Con:
userManagement,passManagement = tool.Enroll()
fmt.Println("您的用户名:",userManagement)
fmt.Println("您的密码:",passManagement)
// 登录
Format:
userManagement1,passManagement1 = tool.Login()
for user := range userManagement {
for pass := range passManagement {
value,exec := userManagement[user]
value1,exec := passManagement[pass]
if exec {
if value == userManagement1[user] && value1 == passManagement1[pass] {
fmt.Println(value)
fmt.Println(value1)
fmt.Println("欢迎登录!")
goto END
} else if value != userManagement1[user] || value != passManagement1[pass] {
fmt.Println("用户名不存在,请注册!")
goto Con
} else {
fmt.Println("您输入的格式错误,请重新输入!")
n++
goto Format
}
}
}
END:
break
}
}
tool.go
package tool
import (
"bufio"
"fmt"
"os"
)
// 登录界面
func Login() (map[string]string, map[string]string) {
user := map[string]string{}
pass := map[string]string{}
fmt.Println("欢迎登录商城页面!")
fmt.Println("请输入登录用户名:")
LoginUser := bufio.NewScanner(os.Stdin)
if LoginUser.Scan() {
user["userName"] = LoginUser.Text()
} else {
user["userName"] = "您输入错误"
}
fmt.Println("请输入登录密码:")
LoginPassword := bufio.NewScanner(os.Stdin)
if LoginPassword.Scan() {
pass["PassWord"] = LoginPassword.Text()
} else {
pass["PassWord"] = "您输入错误"
}
return user,pass
}
// 注册
func Enroll() (map[string]string, map[string]string) {
user := map[string]string{}
pass := map[string]string{}
fmt.Println("欢迎登录商城页面!")
fmt.Println("请输入注册用户名:")
LoginUser := bufio.NewScanner(os.Stdin)
if LoginUser.Scan() {
user["userName"] = LoginUser.Text()
}
for i:=0;i<3;i++ {
fmt.Println("请输入注册密码:")
LoginPassword := bufio.NewScanner(os.Stdin)
if LoginPassword.Scan() {
pass["PassWord"] = LoginPassword.Text()
}
fmt.Println("请再次输入注册密码:")
LoginRePassword := bufio.NewScanner(os.Stdin)
if LoginRePassword.Scan() {
pass["PassWord"] = LoginRePassword.Text()
}
if LoginPassword.Text() == LoginRePassword.Text() {
fmt.Println("密码输入正确")
break
} else {
fmt.Println("两次密码输入错误,请重新输入!")
continue
}
}
return user,pass
}
例二
package main
import (
"fmt"
"time"
)
//用户注册功能:用户从控制台填写用户名和密码信息,被直接进行记录到 map 中。
//用户登录功能:用户从控制台输入用户名和密码信息,进行身份验证匹配,到 map 中匹配,
//如果输入正确,则登录成功;否则登录失败,请重新登录,登录尝试次数为三次,超过三次程序锁定账号 2 分钟。
//如果检测到用户未注册,则自动跳转用户注册界面。
var (
// map 中用户名密码分别为 k,v
// 初始化,空 map 无法增加元素
names map[string]string = map[string]string{}
)
/* 主函数 */
func main() {
switch Memu() {
case 1:
// 注册功能
Register(names)
// 测试语句,查看是否有信息在列表中
// fmt.Println("测试语句:",names)
case 2:
// 登录功能
if Login() {
// 登录成功
fmt.Println("登录成功!")
} else {
// 跳转注册页面
Register(names)
}
}
}
/* 项目清单 */
func Memu() int {
var num int
fmt.Print("1.用户注册\n2.用户登录\n请输入功能编号:")
fmt.Scan(&num)
return num
}
/* 用户注册 */
// map 是引用类型,在函数体中的更改直接影响原 map
func Register(ns map[string]string) {
var (
name string // 用户名
pwd string // 密码
)
HERE:
// 用户输入注册信息
fmt.Println("注册界面")
fmt.Print("用户名:")
fmt.Scan(&name)
//fmt.Println()
fmt.Print("密码:")
fmt.Scan(&pwd)
// 判断输入的用户名是否已被注册(k 是否唯一)
// 下面语句是判断在 ns 集合中是否存在 name 键,存在 exist 值返回 true,不存在返回 false
// 我们不需要 value 值,用空白标识符隐藏
_,exist := ns[name]
if exist {
// 为 true 表示用户已被注册
fmt.Println("用户已注册,请重新输入!")
goto HERE
} else {
ns[name] = pwd // 添加用户密码到 map 中
fmt.Printf("用户 %s 注册成功!\n",name)
// 测试语句:测试成功后是否能登录
if Login() {
fmt.Println("登录成功!")
} else {
fmt.Println("登录失败!")
}
}
}
/* 用户登录 */
func Login() bool {
var (
name string
pwd string
count int = 0 // 尝试登录次数
)
TAG:
// 账号锁机制
if count >= 3 {
fmt.Println("输入错误次数过多,锁定两分钟!")
time.Sleep(time.Minute*2)
count = 0 // 计数初始化
}
// 统计出错次数
count++
// 用户输入登录信息
fmt.Println("登录界面")
fmt.Print("用户名:")
fmt.Scan(&name)
//fmt.Println()
fmt.Print("密码:")
fmt.Scan(&pwd)
password,exist := names[name]
if exist {
// 验证用户是否已注册
if password == pwd { // 密码是否匹配
return true
} else {
// 密码不匹配,但是账号已注册
fmt.Println("用户名密码不匹配,请重新输入!")
goto TAG
}
} else {
// 用户未注册
return false
}
}