Rumah > pembangunan bahagian belakang > Golang > Cara menggunakan golang untuk membina forum ringan

Cara menggunakan golang untuk membina forum ringan

PHPz
Lepaskan: 2023-04-13 09:43:56
asal
838 orang telah melayarinya

Dengan perkembangan berterusan dan mempopularkan Internet dan teknologi komputer, forum, sebagai platform untuk sosialisasi dan komunikasi, telah menarik lebih banyak perhatian dan kasih sayang. Sebagai bahasa pengaturcaraan yang pantas, boleh dipercayai dan cekap, golang telah menjadi pilihan yang semakin popular. Artikel ini akan memperkenalkan cara menggunakan golang untuk membina forum ringan.

1. Bina persekitaran

Pertama sekali, anda perlu mengkonfigurasi persekitaran pembangunan golang. Bergantung pada sistem pengendalian anda, langkah pemasangan tertentu akan berbeza-beza. Anda boleh memilih pakej pemasangan yang disediakan di tapak web rasmi untuk pemasangan, atau anda boleh memasangnya melalui pengurus pakej (seperti apt-get, yum, dll.).

2. Tentukan rangka kerja

Sebelum mula menulis kod, kita perlu memilih rangka kerja yang sesuai untuk membina forum kita. Dalam ekosistem golang, rangka kerja web yang popular pada masa ini termasuk gin, beego, dsb. Di sini kami memilih untuk menggunakan rangka kerja gin.

3. Tulis kod

  1. Mulakan projek gin

Kita boleh menggunakan gin alat baris arahan yang disediakan oleh gin untuk membina rangka projek dengan cepat:

$ go get -u github.com/gin-gonic/gin
$ $GOPATH/bin/gin -i init
Salin selepas log masuk

Arahan ini akan mencipta projek gin baharu, termasuk beberapa penghalaan lalai dan perisian tengah.

  1. Membina pangkalan data

Forum memerlukan storan data yang boleh dipercayai, yang mana kami memilih untuk menggunakan MySQL. Sebelum kita bermula, kita perlu memasang MySQL dan mencipta pangkalan data bernama forum.

CREATE DATABASE forum;
Salin selepas log masuk

Kemudian, kita perlu memasang pemacu mysql:

go get -u github.com/go-sql-driver/mysql
Salin selepas log masuk

Sekarang mari tulis beberapa kod untuk mewujudkan sambungan ke pangkalan data MySQL dan buat jadual bernama pengguna untuk menyimpan Pengguna maklumat:

package main

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"
    "github.com/gin-gonic/gin"
    _ "github.com/go-sql-driver/mysql"
)

var db *sql.DB

func main() {
    //连接MySQL数据库
    var err error
    db, err = sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/forum")
    if err != nil {
        log.Fatal("Failed to connect to database: ", err)
    }
    defer db.Close()

    //测试连接
    err = db.Ping()
    if err != nil {
        log.Fatal("Error connecting to database: ", err)
    } else {
        log.Println("Connected to database!")
    }

    router := gin.Default()

    //创建用户表
    stmt, err := db.Prepare(`CREATE TABLE IF NOT EXISTS users (
        id INTEGER AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(20),
        email VARCHAR(50),
        password VARCHAR(20)
        );`)
    if err != nil {
        log.Fatal("Failed to create table: ", err)
    }
    _, err = stmt.Exec()
    if err != nil {
        log.Fatal("Failed to create table: ", err)
    }

    //注册路由
    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello, world!")
    })

    router.Run()
}
Salin selepas log masuk

Sekarang kita boleh menjalankan kod di atas dan melihat output: Connected to database!.

  1. Tambah fungsi pendaftaran dan log masuk pengguna

Seterusnya, kami akan melaksanakan fungsi pendaftaran dan log masuk pengguna dengan menulis beberapa API.

Pertama, kami menambah laluan untuk mengendalikan permintaan pendaftaran:

router.POST("/register", func(c *gin.Context) {
    //解析请求体
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    //插入新用户到数据库
    stmt, err := db.Prepare("INSERT INTO users(name, email, password) VALUES (?, ?, ?)")
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    _, err = stmt.Exec(user.Name, user.Email, user.Password)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }

    //返回成功响应
    c.JSON(http.StatusOK, gin.H{"message": "User registered"})
})
Salin selepas log masuk

Laluan ini akan menghuraikan data pengguna yang diserahkan ke dalam format json dan memasukkannya ke dalam pangkalan data. Pada masa yang sama, ia juga akan mengembalikan respons yang berjaya.

Seterusnya, kami menambah laluan untuk mengendalikan permintaan log masuk:

router.POST("/login", func(c *gin.Context) {
    //解析请求体
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    //查询用户是否存在
    row := db.QueryRow("SELECT * FROM users WHERE email = ?", user.Email)
    var dbUser User
    err := row.Scan(&dbUser.ID, &dbUser.Name, &dbUser.Email, &dbUser.Password)
    if err != nil {
        c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})
        return
    }

    //验证密码是否正确
    if user.Password != dbUser.Password {
        c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid credentials"})
        return
    }

    //返回成功响应
    c.JSON(http.StatusOK, gin.H{"message": "Login successful"})
})
Salin selepas log masuk

Laluan ini akan menanyakan pangkalan data untuk melihat sama ada terdapat rekod yang sepadan dengan data pengguna yang diserahkan. Jika terdapat padanan, sahkan bahawa kata laluan pengguna adalah betul dan kembalikan jawapan yang berjaya.

4. Jalankan program

Kami kini telah menyelesaikan pembangunan forum golang. Kita boleh memasukkan direktori projek dalam terminal dan masukkan arahan:

go run main.go
Salin selepas log masuk

untuk menjalankan program kami. Pada ketika ini, kita boleh melawati http://localhost:8080 dalam penyemak imbas untuk mengesahkan sama ada program itu berjalan dengan jayanya. Jika semuanya berjalan lancar, anda akan melihat "Helo, dunia!"

5. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan rangka kerja golang dan gin untuk membangunkan forum ringan. Melalui contoh dalam artikel ini, anda seharusnya mempunyai pemahaman tertentu tentang cara menggunakan golang untuk membina aplikasi praktikal. Semoga artikel ini dapat membantu anda.

Atas ialah kandungan terperinci Cara menggunakan golang untuk membina forum ringan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan