在網路時代,隨著網路科技的不斷進步和人們對資訊的需求不斷提高,網站和APP的註冊登入功能也變得越來越常見。本文將介紹如何使用golang語言來實現註冊登入功能。
一、golang簡介
golang是Google公司開發的一種程式語言,它擁有高效的並發處理、垃圾自動回收、極低的編譯時間等特點,具有天然的並發能力和適用於大規模系統的特性。這些特性使得golang成為一個非常優秀的伺服器端語言。因此,使用它來實現註冊登入功能是一個非常好的選擇。
二、環境搭建
要使用golang實作註冊登入功能,首先需要在本機環境中安裝golang語言。在安裝之前,需要先確定自己電腦的作業系統類型 (Windows、Linux、Mac等),並選擇對應的golang版本進行下載和安裝。
安裝完成後,可以在命令列中輸入以下命令來檢查是否安裝成功:
go version
如果顯示golang的版本號,則表示安裝成功。
三、註冊功能實作
#建立一個名為「login」的資料夾,用來放置本次項目的文件。在該資料夾中建立兩個資料夾:controller和model。其中,controller用來放置Web介面的控制器程式碼,model用來放置資料庫操作的程式碼。
在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語句,即可在資料庫中建立使用者表。
在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」的文件,傳回該文件的內容至瀏覽器端。這樣瀏覽器端就可以顯示出我們的註冊介面。
在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方法提交。
在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」來開啟註冊介面。
四、登入功能實作
#在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」的文件,分別用來表示登入成功和失敗後的頁面內容。
在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>
在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>
在“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中文網其他相關文章!