Rumah pembangunan bahagian belakang Golang Golang melaksanakan pendaftaran dan log masuk

Golang melaksanakan pendaftaran dan log masuk

May 10, 2023 pm 03:20 PM

Dalam era Internet, dengan kemajuan berterusan teknologi Internet dan permintaan orang ramai yang semakin meningkat untuk maklumat, fungsi pendaftaran dan log masuk tapak web dan APP telah menjadi semakin biasa. Artikel ini akan memperkenalkan cara menggunakan bahasa golang untuk melaksanakan fungsi pendaftaran dan log masuk.

1. Pengenalan kepada golang

Golang ialah bahasa pengaturcaraan yang dibangunkan oleh Google Ia mempunyai ciri-ciri pemprosesan serentak yang cekap, pengumpulan sampah automatik dan masa kompilasi yang sangat rendah dan ciri yang sesuai untuk sistem berskala besar. Ciri-ciri ini menjadikan golang sebagai bahasa bahagian pelayan yang sangat baik. Oleh itu, menggunakannya untuk melaksanakan fungsi pendaftaran dan log masuk adalah pilihan yang sangat baik.

2. Persediaan persekitaran

Untuk menggunakan golang untuk melaksanakan fungsi pendaftaran dan log masuk, anda perlu memasang bahasa golang dalam persekitaran setempat. Sebelum pemasangan, anda perlu menentukan jenis sistem pengendalian komputer anda (Windows, Linux, Mac, dll.), dan pilih versi golang yang sepadan untuk dimuat turun dan dipasang.

Selepas pemasangan selesai, anda boleh memasukkan arahan berikut dalam baris arahan untuk menyemak sama ada pemasangan berjaya:

go version
Salin selepas log masuk

Jika nombor versi golang dipaparkan, pemasangan berjaya.

3. Pelaksanaan fungsi pendaftaran

  1. Buat folder projek

Buat folder bernama "log masuk" untuk meletakkan fail projek ini. Buat dua folder dalam folder ini: pengawal dan model. Antaranya, pengawal digunakan untuk meletakkan kod pengawal antara muka Web, dan model digunakan untuk meletakkan kod operasi pangkalan data.

  1. Sambungan pangkalan data dan penciptaan jadual

Buat fail bernama "db.go" dalam folder model dan tulis kod berikut di dalamnya untuk mewujudkan sambungan pangkalan data :

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
}
Salin selepas log masuk

Dalam kod di atas, pustaka pihak ketiga "go-sql-driver/mysql" digunakan untuk merealisasikan sambungan pangkalan data. Dalam kod, kami juga perlu menetapkan beberapa maklumat asas pangkalan data, seperti nama pengguna, kata laluan, alamat hos, nombor port, nama pangkalan data, dll.

Langkah seterusnya, kita perlu mencipta fail bernama "user.sql" untuk menulis pernyataan SQL untuk mencipta jadual pengguna, yang mengandungi medan seperti ID pengguna, nama pengguna dan kata laluan.

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;
Salin selepas log masuk

Dengan melaksanakan pernyataan SQL di atas, jadual pengguna boleh dibuat dalam pangkalan data.

  1. Tulis kod pengawal

Buat fail bernama "register.go" dalam folder pengawal untuk menulis kod pengawal untuk antara muka pendaftaran. Dalam fail ini, anda perlu mengimport pustaka pihak ketiga "net/http" dan tulis kod berikut:

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))
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menentukan sama ada kaedah permintaan adalah POST. Jika ia adalah permintaan POST, nama pengguna dan kata laluan diperoleh, kata laluan disulitkan MD5, dan kata laluan dan nama pengguna yang disulitkan disimpan dalam pangkalan data.

Di penghujung fail, gunakan fungsi ioutil.ReadFile() untuk membaca fail bernama "register.html" dan mengembalikan kandungan fail itu kepada penyemak imbas. Dengan cara ini, penyemak imbas boleh memaparkan antara muka pendaftaran kami.

  1. Penulisan antara muka pendaftaran

Buat fail bernama "register.html" dalam folder log masuk untuk menulis kod untuk halaman pendaftaran. Dalam halaman ini, anda perlu menggunakan teg

dan teg untuk mendapatkan maklumat nama pengguna dan kata laluan, dan menyerahkan maklumat ini ke bahagian belakang untuk diproses. Kod khusus adalah seperti berikut:

<!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>
Salin selepas log masuk

Dalam kod di atas, atribut tindakan teg mewakili alamat penyerahan borang, iaitu alamat URL antara muka pendaftaran dan kaedah atribut mewakili kaedah penyerahan borang, iaitu menggunakan penyerahan kaedah POST.

  1. Mulakan pelayan

Buat fail bernama "main.go" dalam folder log masuk untuk memulakan pelayan. Dalam fail ini, anda perlu mengimport pustaka pihak ketiga "net/http" dan tulis kod berikut:

package main

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

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

Dalam kod di atas, kami menggunakan fungsi http.HandleFunc() untuk menentukan alamat penghalaan untuk antara muka pendaftaran. Selepas program dimulakan, anda boleh mengakses "http://localhost:8080/register" melalui pelayar untuk membuka antara muka pendaftaran.

4. Pelaksanaan fungsi log masuk

  1. Tulis kod pengawal

Buat fail bernama "login.go" dalam folder pengawal Digunakan untuk menulis kod pengawal untuk antara muka log masuk. Dalam fail ini, anda perlu mengimport perpustakaan pihak ketiga "net/http" dan "database/sql" dan tulis kod berikut:

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))
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menentukan sama ada kaedah permintaan itu POS. Jika ia adalah permintaan POST, nama pengguna dan kata laluan diperoleh, dan kata laluan disulitkan dengan MD5. Kemudian, kami menanyakan pangkalan data berdasarkan nama pengguna dan kata laluan Jika hasil pertanyaan tidak kosong, ia bermakna log masuk berjaya, jika tidak ia bermakna log masuk gagal.

Di penghujung fail, kami membaca dua lagi fail bernama "success.html" dan "fail.html", yang digunakan untuk mewakili kandungan halaman selepas berjaya dan gagal log masuk masing-masing.

  1. Tulisan antara muka log masuk

Buat fail bernama "login.html" dalam folder log masuk untuk menulis kod untuk halaman log masuk. Halaman ini adalah serupa dengan halaman pendaftaran Ia juga perlu menggunakan teg dan Kod khusus adalah seperti berikut:

<!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>
Salin selepas log masuk
  1. 成功和失败页面编写

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
    <h1>对不起,用户名或密码错误!</h1>
</body>
</html>
Salin selepas log masuk
  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)
}
Salin selepas log masuk

五、总结

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

Atas ialah kandungan terperinci Golang melaksanakan pendaftaran dan log masuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Mar 27, 2025 pm 07:14 PM

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO? Bagaimana anda menggunakan ujian yang didorong oleh jadual di GO? Mar 21, 2025 pm 06:35 PM

Artikel ini membincangkan menggunakan ujian yang didorong oleh jadual di GO, satu kaedah yang menggunakan jadual kes ujian untuk menguji fungsi dengan pelbagai input dan hasil. Ia menyoroti faedah seperti kebolehbacaan yang lebih baik, penurunan duplikasi, skalabiliti, konsistensi, dan a

See all articles