首頁  >  文章  >  後端開發  >  golang實現註冊登錄

golang實現註冊登錄

WBOY
WBOY原創
2023-05-10 15:20:07517瀏覽

在網路時代,隨著網路科技的不斷進步和人們對資訊的需求不斷提高,網站和APP的註冊登入功能也變得越來越常見。本文將介紹如何使用golang語言來實現註冊登入功能。

一、golang簡介

golang是Google公司開發的一種程式語言,它擁有高效的並發處理、垃圾自動回收、極低的編譯時間等特點,具有天然的並發能力和適用於大規模系統的特性。這些特性使得golang成為一個非常優秀的伺服器端語言。因此,使用它來實現註冊登入功能是一個非常好的選擇。

二、環境搭建

要使用golang實作註冊登入功能,首先需要在本機環境中安裝golang語言。在安裝之前,需要先確定自己電腦的作業系統類型 (Windows、Linux、Mac等),並選擇對應的golang版本進行下載和安裝。

安裝完成後,可以在命令列中輸入以下命令來檢查是否安裝成功:

go version

如果顯示golang的版本號,則表示安裝成功。

三、註冊功能實作

  1. 建立專案資料夾

#建立一個名為「login」的資料夾,用來放置本次項目的文件。在該資料夾中建立兩個資料夾:controller和model。其中,controller用來放置Web介面的控制器程式碼,model用來放置資料庫操作的程式碼。

  1. 資料庫連接和建表

在model資料夾中建立一個名為「db.go」的文件,並在其中編寫如下程式碼來建立資料庫連接:

package model

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

const (
    USERNAME = "root"
    PASSWORD = ""
    NETWORK  = "tcp"
    SERVER   = "localhost"
    PORT     = 3306
    DATABASE = "login_system"
)

func DbConn() (db *sql.DB) {
    dbDriver := "mysql"
    dbUser := USERNAME
    dbPass := PASSWORD
    dbName := DATABASE
    db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@tcp("+SERVER+":"+strconv.Itoa(PORT)+")/"+dbName)
    if err != nil {
        fmt.Println("无法连接数据库:", err)
    } else {
        fmt.Println("成功连接数据库!")
    }
    return db
}

在上述程式碼中,使用了第三方程式庫「go-sql-driver/mysql」來實現資料庫的連線。在程式碼中,我們還需要設定一些資料庫的基本信息,例如使用者名稱、密碼、主機位址、連接埠號碼以及資料庫名稱等。

下一步,我們需要建立一個名為「user.sql」的文件,用來編寫建立使用者表的SQL語句,其中包含使用者ID、使用者名稱和密碼等欄位。

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

透過執行上述SQL語句,即可在資料庫中建立使用者表。

  1. 編寫控制器程式碼

在controller資料夾中建立一個名為「register.go」的文件,用來編寫註冊介面的控制器程式碼。在該文件中,需要匯入第三方函式庫“net/http”,並編寫如下程式碼:

package controller

import (
    "crypto/md5"
    "database/sql"
    "encoding/hex"
    "fmt"
    "io/ioutil"
    "net/http"
    "server/model"
)

func Register(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        username := r.FormValue("username")
        password := r.FormValue("password")
        // 密码加密
        h := md5.New()
        h.Write([]byte(password))
        password = hex.EncodeToString(h.Sum(nil))
        // 数据库操作
        db := model.DbConn()
        defer db.Close()
        stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES (?, ?)")
        if err != nil {
            fmt.Println("SQL语句执行失败:", err)
            return
        }
        _, err = stmt.Exec(username, password)
        if err != nil {
            fmt.Println("用户注册失败:", err)
            return
        }
        fmt.Println("用户注册成功!")
    }
    // 返回页面内容
    data, err := ioutil.ReadFile("register.html")
    if err != nil {
        fmt.Println("读取文件失败:", err)
        return
    }
    w.Write([]byte(data))
}

上述程式碼中,我們首先判斷請求方式是否為POST。如果是POST請求,則取得到使用者名稱和密碼,並對密碼進行MD5加密,將加密後的密碼和使用者名稱存入資料庫中。

在文件最後,使用ioutil.ReadFile()函數讀取一個名為「register.html」的文件,傳回該文件的內容至瀏覽器端。這樣瀏覽器端就可以顯示出我們的註冊介面。

  1. 註冊介面編寫

在login資料夾中建立一個名為「register.html」的文件,用來編寫註冊頁面的程式碼。在該頁面中,需要使用ff9c23ada1bcecdd1a0fb5d5a0f18437標籤和d5fd7aea971a85678ba271703566ebfd標籤來獲取到用戶名和密碼信息,並將這些信息提交到後端進行處理。具體程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form action="/register" method="post">
        <p>用户名:<input type="text" name="username" /></p>
        <p>密码:<input type="password" name="password" /></p>
        <input type="submit" value="注册" />
    </form>
</body>
</html>

在上述程式碼中,ff9c23ada1bcecdd1a0fb5d5a0f18437標籤的action屬性表示該表單的提交位址,即註冊介面的URL位址,method屬性表示該表單的提交方式,即使用POST方法提交。

  1. 啟動伺服器

在login資料夾中建立一個名為「main.go」的文件,用來啟動伺服器。在該檔案中,需要匯入第三方函式庫“net/http”,並編寫以下程式碼:

package main

import (
    "net/http"
    "login/controller"
)

func main() {
    // 注册接口路由
    http.HandleFunc("/register", controller.Register)
    // 启动服务器
    http.ListenAndServe(":8080", nil)
}

在上述程式碼中,我們使用http.HandleFunc()函數來為註冊介面指定路由位址。在程式啟動後,可以透過瀏覽器存取「http://localhost:8080/register」來開啟註冊介面。

四、登入功能實作

  1. 編寫控制器程式碼

#在controller資料夾中建立一個名為「login.go」的文件,用來編寫登入介面的控制器程式碼。在該文件中,需要匯入第三方函式庫“net/http”和“database/sql”,並寫如下程式碼:

package controller

import (
    "crypto/md5"
    "database/sql"
    "encoding/hex"
    "fmt"
    "io/ioutil"
    "net/http"
    "server/model"    
)

func Login(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        username := r.FormValue("username")
        password := r.FormValue("password")
        h := md5.New()
        h.Write([]byte(password))
        password = hex.EncodeToString(h.Sum(nil))
        // 根据用户名和密码查询数据库
        db := model.DbConn()
        defer db.Close()
        rows, err := db.Query("SELECT * FROM user WHERE username=? AND password=?", username, password)
        if err != nil {
            fmt.Println("SQL语句执行失败:", err)
            return
        }
        defer rows.Close()
        if rows.Next() {
            fmt.Println("登录成功!")
            // 返回登录成功页面
            data, err := ioutil.ReadFile("success.html")
            if err != nil {
                fmt.Println("读取文件失败:", err)
                return
            }
            w.Write([]byte(data))
        } else {
            fmt.Println("用户名或密码不正确!")
            // 返回登录失败页面
            data, err := ioutil.ReadFile("fail.html")
            if err != nil {
                fmt.Println("读取文件失败:", err)
                return
            }
            w.Write([]byte(data))
        }
    }
    // 返回登录页面
    data, err := ioutil.ReadFile("login.html")
    if err != nil {
        fmt.Println("读取文件失败:", err)
        return
    }
    w.Write([]byte(data))
}

上述程式碼中,我們首先判斷請求方式是否為POST。如果是POST請求,則取得到使用者名稱和密碼,並對密碼進行MD5加密。然後,我們根據使用者名稱和密碼查詢資料庫,如果查詢結果不為空則表示登入成功,否則則表示登入失敗。

在文件最後,我們再讀取兩個名為「success.html」和「fail.html」的文件,分別用來表示登入成功和失敗後的頁面內容。

  1. 登入介面編寫

在login資料夾中建立一個名為「login.html」的文件,用來編寫登入頁面的程式碼。該頁面與註冊頁面類似,也需要使用ff9c23ada1bcecdd1a0fb5d5a0f18437標籤和d5fd7aea971a85678ba271703566ebfd標籤來獲取到用戶名和密碼信息,並將這些信息提交到後端進行處理。具體程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form action="/login" method="post">
        <p>用户名:<input type="text" name="username" /></p>
        <p>密码:<input type="password" name="password" /></p>
        <input type="submit" value="登录" />
    </form>
</body>
</html>
  1. 成功和失败页面编写

在login文件夹中创建一个名为“success.html”的文件,用来编写登录成功后的页面代码。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
</head>
<body>
    <h1>恭喜,登录成功!</h1>
</body>
</html>

在login文件夹中再创建一个名为“fail.html”的文件,用来编写登录失败后的页面代码。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
    <h1>对不起,用户名或密码错误!</h1>
</body>
</html>
  1. 注册接口路由修改

在“main.go”文件中,将注册接口路由的地址改为“/”即可。最终代码如下:

package main

import (
    "net/http"
    "login/controller"
)

func main() {
    // 注册接口路由
    http.HandleFunc("/", controller.Register)
    // 登录接口路由
    http.HandleFunc("/login", controller.Login)
    // 启动服务器
    http.ListenAndServe(":8080", nil)
}

五、总结

本文介绍了如何使用golang语言来实现注册登录功能。通过本文的学习,我们可以看到golang语言实现简洁高效、性能优越,适合用于实现服务器端开发。同时,本文也向读者展示了如何使用golang与数据库进行交互,以及如何使用golang实现Web接口的功能。希望本文能够为读者带来一些参考和启发。

以上是golang實現註冊登錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn