在这篇博客中,我将制作一个 Web 应用程序,它将注册用户的数据存储在 MySQL 数据库中。

MySQL 是 Oracle 开发的基于结构化查询语言 (SQL) 的关系数据库管理系统 (RDBMS)。

MySQL 是现代大数据生态系统中最知名的技术之一。通常被称为最流行的数据库,并且目前无论在哪个行业都享有广泛、有效的使用,很明显,任何涉及企业数据或一般 IT 的人至少应该以基本熟悉 MySQL 为目标。

使用 MySQL,即使是刚接触关系系统的人也可以立即构建快速、强大和安全的数据存储系统。 MySQL 的编程语法和接口也是进入其他流行查询语言和结构化数据存储的广阔世界的完美门户。

这些数据是根据关系模型组织的。在该模型中,表由行和列组成,数据元素之间的关系都遵循严格的逻辑结构。 RDBMS 只是用于实际实现、管理和查询此类数据库的一组软件工具。

Golang的初学者经常不知道如何在MySQL中存储数据,因为网上的资源并不多。这个博客肯定会帮助你理解 Golang 和 MySQL 的概念。

先决条件

  • 安装Golang。

  • 安装MySQL。

在Linux和Windows中设置root密码

sudo mysql_secure_installation

实现

mysql -u root -pshow databases;create database ;show databases;use 

制作带有一些页面的主模板

main.go

package main

import (
    "fmt"
    "html/template"
    "log"
    "net/http"
)

func MakeTemplate(path string) template.Template {
  return *template.Must(template.ParseFiles(path))
}

var homeTmpl = MakeTemplate("views/templates/home.html")
var signupTmpl = MakeTemplate("views/templates/signup.html")
var loginTmpl = MakeTemplate("views/templates/login.html")

func HomePage(w http.ResponseWriter) {
  if err := homeTmpl.Execute(w, nil); err != nil {
      log.Fatal(err)
  }
}

func SignupPage(w http.ResponseWriter) {
  if err := signupTmpl.Execute(w, nil); err != nil {
      log.Fatal(err)
  }
}

func LoginPage(w http.ResponseWriter) {
  if err := loginTmpl.Execute(w, nil); err != nil {
        log.Fatal(err)
  }
}

func main() {
  http.HandleFunc("/", HomePage)
  http.HandleFunc("/signup", SignupPage)
  http.HandleFunc("/login", LoginPage)
  fmt.Println("Starting the server at port: 8080")
  if err := http.ListenAndServe(":8080", nil); err != nil {
      log.Fatal(err)
  }
}
HomePage()SignupPage()LoginPage()main()8080MakeTemplate()template.Must(template.ParseFiles(path))

您可以为自己制作一个 HTML 主页和登录页面,但在此博客中,但我的重点是注册页面。

创建一个 HTML 注册表单

视图/模板/signup.html

<!DOCTYPE html>
<html>
<body>
  <form action="/signup" style="border:1px solid #ccc">
    <div class="container">
      <h1 style="text-align:center">Sign Up</h1>
      <p>Please fill in this form to create an account.</p>
      <hr>

      <label for="fname"><b>First Name</b></label>
      <input type="text" placeholder="Enter First Name" name="fname" required>

      <label for="lname"><b>Last Name</b></label>
      <input type="text" placeholder="Enter Last Name" name="lname" required>

      <label for="email"><b>Email</b></label>
      <input type="text" placeholder="Enter Email" name="email" required>

      <label for="password"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="password" required>

      <label for="confirm-pasword"><b>Confirm Password</b></label>
      <input type="password" placeholder="Confirm Password" name="confirm-password" required>

      <div>
        <button type="submit" class="signupbtn">Sign Up</button>
      </div>

    </div>
  </form>
</body>
</html>
  • 此注册表单包含名字、姓氏、电子邮件地址、密码和确认密码。这些数据将存储在数据库中。

从表单中获取注册数据

main.go

type SignupForm struct {
    Fname           string
    Lname           string
    Email           string
    Password        string
    ConfirmPassword string
};

func SignupPage(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        if err := signupTmpl.Execute(w, nil); err != nil {
            log.Fatal(err)
        }
    } else if r.Method == "POST" {
        values := SignupForm{
            Fname:           r.FormValue("fname"),
            Lname:           r.FormValue("lname"),
            Email:           r.FormValue("email"),
            Password:        r.FormValue("password"),
            ConfirmPassword: r.FormValue("confirm-password"),
        }
    }
} 
SignupPage()GET and POSTGETPOSTSignupPage()

使用数据库

数据库/db.SQL

CREATE TABLE IF NOT EXISTS SignupForm {
    id INT PRIMARY KEY AUTO_INCREMENT
    fname VARCHAR(255) NOT NULL,
    lname VARCHAR(255) NOT NULL,
    emails VARCHAR(255) NOT NULL UNIQUE,
    passwords VARCHAR(255) NOT NULL
}
idemails

数据库/mysql.go

package database

import (
    "database/sql"
    "fmt"
    "io/ioutil"
    "log"
    "strings"

   _ "github.com/go-sql-driver/mysql"
)

func Connection() (db *sql.DB) {
    db_user := "root"
    db_password := "anypassword"
    db_address := "127.0.0.1"
    db_db := "database-name"
    s := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s", db_user, db_password, db_address, db_db)
    db, err := sql.Open("mysql", s)
    if err != nil {
        log.Fatal(err)
    }
    return db
}
ssql.Opendatabase/sqlgithub.com/go-sql-driver/mysqlmysqlsql.Opens
func CreateTable(file string, number int) (db *sql.DB) {
    db = Connection()
    query, err := ioutil.ReadFile("database/" + file)
    if err != nil {
        log.Fatal(err)
    }
    requests := strings.Split(string(query), ";")[number]

    stmt, err := db.Prepare(requests)
    if err != nil {
        log.Fatal(err)
    }

    _, err = stmt.Exec()
    if err != nil {
        log.Fatal(err)
    }
    return db
}
ioutil.ReadFile;;
func InsertSignup(value [4]string) {
    db := CreateTable("db.SQL", 0)
    q := "INSERT INTO SignupForm(fname, lname, emails, passwords) VALUES(?, ?, ?, ?)"
    insert, err := db.Prepare(q)
    if err != nil {
        log.Fatal(err)
    }
    defer insert.Close()

    if len(value[2]) != 0 && len(value[3]) != 0 {
        _, err = insert.Exec(value[0], value[1], value[2], value[3])
        if err != nil {
            log.Fatal(err)
        }
    }
}
InsertSignup()CreateTable()

在SignupPage()函数中使用数据库函数

main.go

func SignupPage(w http.ResponseWriter, r *http.Request) {
    ...
        note := [4]string{values.Fname, values.Lname, values.Email, values.Password, values.ConfirmPassword}
        database.InsertSignup(note)
        if err := loginTmpl.Execute(w, nil); err != nil {
            log.Fatal(err)
        }
    }  // else-if statement curly braces of POST method.
}     
SigupnPage()notenoteInsertSignup()

我希望我能告诉你如何使用 Golang 将数据存储在 MySQL 中。我已经尽我所能让你了解这个过程。如果您仍有疑问,可以在下面的评论部分中问我,或者您可以在Twitter上关注我。

谢谢!