go语言的简单注册登陆
实现逻辑很简单
先注册路由,前端调用路由方法,将数据传递给go程序,后端接受到数据后,或执行登陆或执行注册,并返回相应结果
涉及到 路由,mysql
main.go文件代码:
package main
import (
"crypto/md5"
"database/sql"
"encoding/json"
"fmt"
_ "go-sql-driver/mysql"
"io"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/login", login)
mux.HandleFunc("/register", register)
http.ListenAndServe(":8080", mux) //监听8080端口
}
type result struct { //定义返回数据格式
Code int
Msg string
Data []string
}
func login(w http.ResponseWriter, r *http.Request) { //登陆
w.Header().Set("Access-Control-Allow-Origin", "*") //允许跨域
r.ParseForm()
username, found1 := r.Form["username"]
password, found2 := r.Form["password"]
if !(found1 && found2) {
io.WriteString(w, "请勿非法访问")
return
}
db, err := sql.Open("mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8") //登陆msyql
if err != nil {
fmt.Println(err)
}
defer db.Close()
var post_data PostData
post_data.user_name = username[0]
post_data.pass_word = password[0]
var filter_data FilterData = post_data
post_data = filter_data.formatData()
var row *sql.Row
row = db.QueryRow("select * from users where username = ? and password = ?", post_data.user_name, post_data.pass_word)
var user_name, pass_word string
var id int
err = row.Scan(&id, &user_name, &pass_word) //遍历结果
if err != nil {
arr := &result{
500,
"登陆失败",
[]string{},
}
b, json_err := json.Marshal(arr) //json化结果集
if json_err != nil {
fmt.Println("encoding faild")
} else {
io.WriteString(w, string(b)) //返回结果
}
} else {
arr := &result{
200,
"登陆成功",
[]string{},
}
b, json_err := json.Marshal(arr) //json化结果集
if json_err != nil {
fmt.Println("encoding faild")
} else {
io.WriteString(w, string(b)) //返回结果
}
}
}
func register(w http.ResponseWriter, r *http.Request) { //注册
w.Header().Set("Access-Control-Allow-Origin", "*") //允许跨域
r.ParseForm()
username, found1 := r.Form["username"]
password, found2 := r.Form["password"]
if !(found1 && found2) {
io.WriteString(w, "请勿非法访问")
return
}
db, err := sql.Open("mysql", "root@tcp(127.0.0.1:3306)/test?charset=utf8")
if err != nil {
io.WriteString(w, "连接数据库失败")
return
}
defer db.Close() //在返回前关闭资源(延迟)
var post_data PostData
post_data.user_name = username[0]
post_data.pass_word = password[0]
var filter_data FilterData = post_data
post_data = filter_data.formatData()
_, err = db.Exec("insert into users(username, password) values(?,?)", post_data.user_name, post_data.pass_word) //插入数据
if err != nil {
arr := &result{
500,
"注册失败",
[]string{},
}
b, json_err := json.Marshal(arr) //json化结果集
if json_err != nil {
fmt.Println("encoding faild")
} else {
io.WriteString(w, string(b)) //返回结果
}
} else {
arr := &result{
200,
"注册成功",
[]string{},
}
b, json_err := json.Marshal(arr) //json化结果集
if json_err != nil {
fmt.Println("encoding faild")
} else {
io.WriteString(w, string(b)) //返回结果
}
}
}
type FilterData interface { //定义数据接口
formatData() PostData
}
type PostData struct { //定义传递数据结构体
user_name string
pass_word string
}
func (post_data PostData) formatData() PostData { //格式化数据
post_data.pass_word = mdFormat(post_data.pass_word)
return post_data
}
func mdFormat(data string) string { //对字符串进行md5加密
t := md5.New()
io.WriteString(t, data)
return fmt.Sprintf("%x", t.Sum(nil))
}
有些代码部分重复了,暂时懒得弄了(其实是不知道怎么抽象出来好)
目录结果如上
运行的时候先 go run main.go
然后把html目录下的login.html拖进浏览器
酱紫
GitHub项目路径 https://github.com/donghuabubai/simpleLogin-go-
PS:记得先配置好本地mysql
PS:如果对你有那么一点用处,记得点个星哈
go语言的简单注册登陆相关推荐
- php连接mysql实现简单注册登陆页面
登陆页面index.html 注册页面 register.html 安装Mysql数据库后,用MySQL数据库管理页面phpmyadmin创建数据库和表单 浏览器输入:域名/phpmyadmin ,没 ...
- C语言实现简单的登录注册功能
C语言实现一个简单的用户登录,以及用户注册功能. #include "stdio.h" #include "string.h" #include "w ...
- 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板
使用PHP语言搭建简单的论坛 简单留言板 留言 个人中心 登录 验证码 注册 头像 ...
- Struts2和hibernate框架整合实现简单的注册登陆功能
Struts2和hibernate框架整合实现简单的注册登陆功能 项目结构: LoginAction.java package action; import vo.User; import vo.Us ...
- django写一个简单的登陆注册
要写这个,前提还是需要知道三个知识: 一个是urls.py,它是写我们的路由关系的,之前我写了通过wsgiref写一个简单的服务端,也用到了路由,就是 请求过来的url和视图函数的对应关系. 二是就是 ...
- Android借助bmob实现简单的登陆注册
借助bmob实现简单的登陆注册 实现步骤 1注册bmob 2配置Bomb相关 3扩展自己的用户列表 4实现注册 5实现登陆 欢迎下载 https://github.com/kurumi2501314/ ...
- Android 实现简单的登陆注册功能(SharedPreferences和SQLite)
最近刚好做了一个Android的登录注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登陆注册功能,本文未涉及到与服务器的交流. 首先,对于登 ...
- ET---通过注册登陆请求走一遍简单的消息传输
通过注册登陆请求走一遍简单的消息传输 请大家关注我的微博:@NormanLin_BadPixel坏像素 //创建登录服务器连接 IPEndPoint connetRealmEndPoint = Net ...
- 简单php登陆注册模块
前一段时间刚刚开始学习php 很简单很实用 开发效率很高 很适合我这样的新手 于是做了一个简单的登陆注册模块 里面包含了很多常用的表单提交数据 也加入了验证码 供新手们借鉴 说实话 我只会写网页 做 ...
最新文章
- python extractall函数_Pandas从str.extractall('#')中给出错误
- nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏
- 【NLP】270篇ACL 2019代码开源的论文,全在这里了!
- object c 快速构建对象
- 解决Python中PyCharm导入模块时,模块名下出现红色波浪线的问题
- git commit –a时使用vim编辑提交信息
- JavaScript的类型转换(字符转数字,数字转字符)
- struts2实现文件上传
- 这样的书 我改怎么起名呢?
- webpack5学习与实战-(六)-babel-loader解析js文件
- 算法分析与设计-线性时间选择详解(通俗易懂,含图解,附源码)(c++)
- 入职体检的体检项目有哪些呢?
- 单因素方差分析及其相关检验
- 人工智能的安全、伦理和隐私问题
- 解决win10拨号连接下无法开启热点
- 线程、进程和协成对比
- Shiro系列(一)——Shiro + Springboot + JWT 整合
- http://ai.taobao.com/?pid=mm_40428920_1105750338_109783200329
- 编程模式之观察者模式
- 张继群,创青春-数字经济赛道,中国创翼临沂市决赛,创客中国-中小企业创客比赛-临沂市决赛