Cara membangunkan perpustakaan dalam talian menggunakan bahasa Go dan Redis

WBOY
Lepaskan: 2023-10-27 09:15:51
asal
893 orang telah melayarinya

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

)

var klien *redis.Client

func Init() {

client = redis.NewClient(&redis.Options{
  Addr: "localhost:6379",
  Password: "", // 如果有密码,填写密码
  DB: 0,
})
Salin selepas log masuk

}

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

}

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

}

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

}

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

)

func main() {

ID string
Name string
Author string
Year string
Salin selepas log masuk

}

func GetBooksHandler .ResponseWriter, r *http.Request) {

"encoding/json"
"github.com/gorilla/mux"
"io/ioutil"
"net/http"
"online_library/database"
Salin selepas log masuk

}

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

}

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

}

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

}

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

}

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.

6 Menjalankan dan menguji

Selepas melengkapkan penulisan kod di atas, kami boleh menjalankan projek dan mengujinya. Jalankan arahan berikut dalam terminal:

$ go run .

    Seterusnya, kita boleh menggunakan alatan seperti Postman atau curl untuk menguji antara muka API. Berikut adalah beberapa contoh permintaan:
  • Dapatkan semua buku: DAPATKAN http://localhost:8080/books
  • Dapatkan buku melalui ID: DAPATKAN http://localhost:8080/books/1
  • Tambah buku: POST http: //localhost:8080/books
  • Isi permintaan: {"id": "1", "name": "Pengenalan kepada bahasa Go", "author": "Zhang San", "year": "2021"}
Padam Buku: DELETE http://localhost:8080/books/1


7. Ringkasan🎜 Artikel ini memperkenalkan cara menggunakan bahasa Go dan Redis untuk membangunkan perpustakaan dalam talian yang ringkas. Dengan menggunakan prestasi cekap Go dan storan data pantas Redis, kami boleh mencipta sistem perpustakaan yang berkuasa dan mudah diurus dengan mudah. Artikel ini juga menyediakan contoh dan penjelasan kod khusus untuk membantu pembaca memahami dan mempraktikkan projek ini. Saya harap artikel ini akan membantu anda dalam mempelajari bahasa Go dan pembangunan Redis. 🎜

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!

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