综合前两天的学习,自己写了一个小项目
主要目的:将学习的 东西都整合起来,连接前端html表单文件+GO逻辑+MySQL数据库
易错点:GO调用同一项目下不同包的方法
在项目下新建一个名为ui的文件夹,再创建一个login.html
<html>
<head>
<title>logintitle>
head>
<body>
<form action="http://127.0.0.1:9090/login" method="post">
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="Login">
form>
body>
html>
建立一个文件夹命名为db,然后创建一个dao.go文件
如果对GO连接mysql不熟悉的童鞋们,可以参考我上一篇详细的文章https://blog.csdn.net/qq_40763548/article/details/116697857?spm=1001.2014.3001.5501
源码如下,本文主要是写了增加和查询两个方法来检测数据库
package db
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func Db_connection()(db *sql.DB){
db, err :=sql.Open("mysql", "root:root@tcp(localhost:3306)/test")
if err != nil {
fmt.Println(">>> fail to connect to db <<<")
}
fmt.Println(">>> succeed to connect to db <<<")
return db
}
type account struct {
id int
username string
password string
}
func Query(db *sql.DB){
rows,err:=db.Query("SELECT * FROM account")
if err!=nil{
panic(err)
}
for rows.Next(){
var id int
var un string
var pwd string
if err:=rows.Scan(&id,&un,&pwd); err !=nil{
log.Fatal(err)
}
fmt.Printf("Account: ID_%d UserName_%s Password_%s",id,un,pwd)
}
}
func Insert(db *sql.DB, un string, pwd string){
stmt,err:=db.Prepare("INSERT INTO account(username,password) VALUES ('"+un+"','"+pwd+"')")
if err != nil{
panic(err)
}
result,err:=stmt.Exec()
id,err := result.LastInsertId()
fmt.Printf("Successfully Added User with ID: %d",id)
}
注意!!!!!所有需要被调用的方法请一定一定在命方法名的时候首字母大写!!!
不然真的没法被调用!!!!!!!!!!!!!!!!!!!!!!!
func login(w http.ResponseWriter, r *http.Request) {
fmt.Println("method: ",r.Method)
if r.Method == "GET"{
//第一次访问,GET则跳到login.hmtl界面
t, _ := template.ParseFiles("C:\\Users\\xm\\Desktop\\GO_Materials\\go.form.cn\\ui\\login.html")
t.Execute(w,nil)
}else{
//通过表单post方法则获得表单信息
r.ParseForm()
fmt.Println("username: ", r.Form["username"]) //console里面可以看到相关信息
fmt.Println("password:", r.Form["password"])
un := r.FormValue("username")
pwd := r.FormValue("password")
db.Insert(database,un,pwd)//插入数据库!!特别注意,请看下面详细解释
}
}
!!特别注意!!
我们是如何再login.go中调用dao.go的Insert方法呢,他们并不在一个包里(看第一部分的结构图)?
步骤具体为下面4步:
本文只是很粗略的获取表单信息,插入数据库;其实通常此步中还需要做验证,我后期学习验证后再补充分享
func main() {
database = db.Db_connection()
http.HandleFunc("/login", login) //设置访问的路由
err:=http.ListenAndServe(":9090", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
db.Query(database) //此处可以检测是否插入成功
}
本文是一个很小的项目哈,适合像我一样小白们一起学习!希望能都有需求的人有一点点帮助~
继续愉快学习
涂涂努力ing