实现逻辑很简单

先注册路由,前端调用路由方法,将数据传递给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语言的简单注册登陆相关推荐

  1. php连接mysql实现简单注册登陆页面

    登陆页面index.html 注册页面 register.html 安装Mysql数据库后,用MySQL数据库管理页面phpmyadmin创建数据库和表单 浏览器输入:域名/phpmyadmin ,没 ...

  2. C语言实现简单的登录注册功能

    C语言实现一个简单的用户登录,以及用户注册功能. #include "stdio.h" #include "string.h" #include "w ...

  3. 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板

    使用PHP语言搭建简单的论坛 简单留言板 留言 个人中心           登录                验证码           注册                头像          ...

  4. Struts2和hibernate框架整合实现简单的注册登陆功能

    Struts2和hibernate框架整合实现简单的注册登陆功能 项目结构: LoginAction.java package action; import vo.User; import vo.Us ...

  5. django写一个简单的登陆注册

    要写这个,前提还是需要知道三个知识: 一个是urls.py,它是写我们的路由关系的,之前我写了通过wsgiref写一个简单的服务端,也用到了路由,就是 请求过来的url和视图函数的对应关系. 二是就是 ...

  6. Android借助bmob实现简单的登陆注册

    借助bmob实现简单的登陆注册 实现步骤 1注册bmob 2配置Bomb相关 3扩展自己的用户列表 4实现注册 5实现登陆 欢迎下载 https://github.com/kurumi2501314/ ...

  7. Android 实现简单的登陆注册功能(SharedPreferences和SQLite)

    最近刚好做了一个Android的登录注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登陆注册功能,本文未涉及到与服务器的交流. 首先,对于登 ...

  8. ET---通过注册登陆请求走一遍简单的消息传输

    通过注册登陆请求走一遍简单的消息传输 请大家关注我的微博:@NormanLin_BadPixel坏像素 //创建登录服务器连接 IPEndPoint connetRealmEndPoint = Net ...

  9. 简单php登陆注册模块

    前一段时间刚刚开始学习php 很简单很实用 开发效率很高 很适合我这样的新手 于是做了一个简单的登陆注册模块 里面包含了很多常用的表单提交数据 也加入了验证码 供新手们借鉴 说实话 我只会写网页  做 ...

最新文章

  1. python extractall函数_Pandas从str.extractall('#')中给出错误
  2. nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏
  3. 【NLP】270篇ACL 2019代码开源的论文,全在这里了!
  4. object c 快速构建对象
  5. 解决Python中PyCharm导入模块时,模块名下出现红色波浪线的问题
  6. git commit –a时使用vim编辑提交信息
  7. JavaScript的类型转换(字符转数字,数字转字符)
  8. struts2实现文件上传
  9. 这样的书 我改怎么起名呢?
  10. webpack5学习与实战-(六)-babel-loader解析js文件
  11. 算法分析与设计-线性时间选择详解(通俗易懂,含图解,附源码)(c++)
  12. 入职体检的体检项目有哪些呢?
  13. 单因素方差分析及其相关检验
  14. 人工智能的安全、伦理和隐私问题
  15. 解决win10拨号连接下无法开启热点
  16. 线程、进程和协成对比
  17. Shiro系列(一)——Shiro + Springboot + JWT 整合
  18. http://ai.taobao.com/?pid=mm_40428920_1105750338_109783200329
  19. 编程模式之观察者模式
  20. 张继群,创青春-数字经济赛道,中国创翼临沂市决赛,创客中国-中小企业创客比赛-临沂市决赛

热门文章

  1. 2021年考研,3个月南理工计算机学硕上岸经验帖
  2. Mac电脑使用:正确安装nvm的方法(非常详细)
  3. 艾美捷EndoGrade卵清蛋白重组示例说明
  4. Signoff Criteria --- ocv/aocv/pocv之POCV介绍
  5. Multisim中一些元件的符号说明
  6. 全球及中国生狗粮行业需求潜力及未来前景战略研究报告2021年版
  7. 内部消息,张纪中要拍大陆版《圣斗士星矢》
  8. 如何学习Unity3d开发,菜鸟在线有妙招!
  9. AutoJS截屏为黑色解决方式
  10. 打印出九九乘法口诀表