Rumah > Artikel > pembangunan bahagian belakang > Cara membangunkan perpustakaan dalam talian menggunakan bahasa Go dan Redis
Cara menggunakan bahasa Go dan Redis untuk membangunkan perpustakaan dalam talian
Abstrak: Artikel ini akan mengajar anda cara menggunakan bahasa Go dan Redis untuk membangunkan perpustakaan dalam talian yang mudah. Dengan menggunakan prestasi cekap Go dan storan data pantas Redis, kami boleh mencipta sistem perpustakaan yang berkuasa dan mudah diurus dengan mudah. Artikel itu akan memperkenalkan pengetahuan asas bahasa Go, pemasangan dan konfigurasi Redis, serta memberikan contoh dan penjelasan kod khusus.
1 Pengenalan kepada bahasa Go dan bahasa Redis
Go ialah bahasa yang disusun secara statik yang dibangunkan oleh Google. Ia mempunyai prestasi yang baik, sokongan serentak dan keupayaan pengumpulan sampah, menjadikannya ideal untuk membina perkhidmatan bahagian belakang yang cekap. Redis ialah pangkalan data storan nilai kunci berasaskan memori yang menyediakan penyelesaian penyimpanan data berprestasi tinggi dan tahan lama. Menggunakan bahasa Go dan Redis, kami boleh membina sistem perpustakaan dalam talian yang pantas dan berskala.
2 Pasang bahasa Go dan Redis
Mula-mula, anda perlu memasang bahasa Go dan Redis. Sila pilih pakej pemasangan yang sesuai untuk pemasangan bergantung pada sistem pengendalian. Selepas pemasangan selesai, konfigurasikan pembolehubah persekitaran bagi bahasa Go dan Redis.
3 Mulakan projek bahasa Go
Buka terminal dan buat projek bahasa Go baharu:
$ mkdir online_library
$ cd online_library
$ go mod init github.com/yourname/online_library
Jalankan arahan di atas terminal, Folder bernama online_library akan dibuat dan fail go.mod dihasilkan.
4 Tulis lapisan akses pangkalan data
Dalam bahasa Go, kita boleh menggunakan perpustakaan klien Redis untuk mengakses pangkalan data. Mula-mula, jalankan arahan berikut untuk memasang pustaka klien Go untuk Redis:
$ go get github.com/go-redis/redis/v8
Buat fail bernama database.go dalam direktori akar projek dan tulis Kod berikut:
pangkalan data pakej
import (
"github.com/go-redis/redis/v8"
)
var klien *redis.Client
func Init() {
client = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 如果有密码,填写密码 DB: 0, })
}
func GetBooks()) {[]reee
}func GetBookByID(rentetan id) (*Book, error) {// 从Redis中获取图书列表 books, err := client.Keys("book:*").Result() if err != nil { return nil, err } var bookList []Book for _, bookKey := range books { book, err := client.HGetAll(bookKey).Result() if err != nil { return nil, err } // 将数据转换为Book结构体 var b Book b.ID = book["id"] b.Name = book["name"] b.Author = book["author"] b.Year = book["year"] bookList = append(bookList, b) } return bookList, nil}func AddBook(book *Book) error {
// 根据ID从Redis中获取图书信息 book, err := client.HGetAll("book:" + id).Result() if err != nil { return nil, err } // 将数据转换为Book结构体 var b Book b.ID = book["id"] b.Name = book["name"] b.Author = book["author"] b.Year = book["year"] return &b, nil}func DeleteBook(id string) error {
rreee
taip Book struct {
// 将图书信息存储到Redis中 err := client.HMSet("book:"+book.ID, map[string]interface{}{ "id": book.ID, "name": book.Name, "author": book.Author, "year": book.Year, }).Err() if err != nil { return err } return nil
}
Dalam fail database.go, kami mentakrifkan beberapa fungsi yang berinteraksi dengan pangkalan data Redis dan memulakan klien Redis. Fungsi ini termasuk mendapatkan semua buku, mendapatkan buku dengan ID, menambah buku dan memadamkan buku.
Nota: Di sini kami menyimpan maklumat berkaitan buku dalam Redis dan menggunakan struktur data Hash untuk penyimpanan.
5. Menulis lapisan antara muka API
Dalam bahasa Go, kita boleh menggunakan pakej net/http perpustakaan standard untuk menulis API Web. Cipta fail bernama main.go dalam direktori akar projek dan tulis kod berikut:
pakej utama
import (
// 从Redis中删除图书 err := client.Del("book:" + id).Err() if err != nil { return err } return nil
)
func main() {
ID string Name string Author string Year string
}
func GetBooksHandler .ResponseWriter, r *http.Request) {
"encoding/json" "github.com/gorilla/mux" "io/ioutil" "net/http" "online_library/database"
}
func GetBookByIDHandler(w http.ResponseWriter, r *http.Request) {
// 初始化数据库 database.Init() // 创建路由 router := mux.NewRouter() router.HandleFunc("/books", GetBooksHandler).Methods("GET") router.HandleFunc("/books/{id}", GetBookByIDHandler).Methods("GET") router.HandleFunc("/books", AddBookHandler).Methods("POST") router.HandleFunc("/books/{id}", DeleteBookHandler).Methods("DELETE") // 启动Web服务器 http.ListenAndServe(":8080", router)
}
func AddBookHandler(w http.ResponseWriter, r *http.Request) {
// 获取所有图书 books, err := database.GetBooks() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 返回图书列表 json.NewEncoder(w).Encode(books)
}
func AddBookHandler(w http.ResponseWriter ) {
// 获取图书ID vars := mux.Vars(r) id := vars["id"] // 根据ID获取图书 book, err := database.GetBookByID(id) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 返回图书信息 json.NewEncoder(w).Encode(book)
}
func DeleteBookHandler(w http.ResponseWriter, r *http.Request) {
// 解析请求体 body, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } var book database.Book err = json.Unmarshal(body, &book) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 添加图书 err = database.AddBook(&book) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 返回成功状态 w.WriteHeader(http.StatusOK)
}
Dalam fail main.go, kami menentukan beberapa fungsi pemprosesan antara muka API dan mencipta penghala berasaskan mux. Fungsi ini termasuk mendapatkan semua buku, mendapatkan buku dengan ID, menambah buku dan memadamkan buku.
Selepas melengkapkan penulisan kod di atas, kami boleh menjalankan projek dan mengujinya. Jalankan arahan berikut dalam terminal:
$ go run .
Atas ialah kandungan terperinci Cara membangunkan perpustakaan dalam talian menggunakan bahasa Go dan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!