Maison  >  Article  >  développement back-end  >  Comment développer une bibliothèque en ligne en utilisant le langage Go et Redis

Comment développer une bibliothèque en ligne en utilisant le langage Go et Redis

WBOY
WBOYoriginal
2023-10-27 09:15:51890parcourir

Comment développer une bibliothèque en ligne en utilisant le langage Go et Redis

Comment utiliser le langage Go et Redis pour développer une bibliothèque en ligne

Résumé : Cet article vous apprendra comment utiliser le langage Go et Redis pour développer une bibliothèque en ligne simple. En utilisant les performances efficaces de Go et le stockage rapide des données de Redis, nous pouvons facilement créer un système de bibliothèque puissant et facile à gérer. L'article présentera les connaissances de base du langage Go, l'installation et la configuration de Redis, et fournira des exemples de code et des explications spécifiques.

1. Introduction au langage Go et à Redis
Le langage Go est un langage compilé à typage statique développé par Google. Il offre de bonnes performances, une prise en charge de la concurrence et des capacités de récupération de place, ce qui le rend idéal pour créer des services backend efficaces. Redis est une base de données de stockage clé-valeur basée sur la mémoire qui fournit des solutions de stockage de données hautes performances et durables. En utilisant le langage Go et Redis, nous pouvons créer un système de bibliothèque en ligne rapide et évolutif.

2. Installez le langage Go et Redis
Tout d'abord, vous devez installer le langage Go et Redis. Veuillez sélectionner le package d'installation approprié pour l'installation en fonction du système d'exploitation. Une fois l'installation terminée, configurez les variables d'environnement du langage Go et Redis.

3. Initialisez le projet de langage Go
Ouvrez le terminal et créez un nouveau projet de langage Go :

$ mkdir online_library
$ cd online_library
$ go mod init github.com/yourname/online_library

Exécutez la commande ci-dessus dans le terminal, un dossier nommé online_library sera créé et un fichier go.mod généré.

4. Écrire la couche d'accès à la base de données
En langage Go, nous pouvons utiliser la bibliothèque client Redis pour accéder à la base de données. Tout d'abord, exécutez la commande suivante pour installer la bibliothèque client Go pour Redis :

$ go get github.com/go-redis/redis/v8

Créez un fichier nommé database.go dans le répertoire racine du projet et écrivez le Code suivant :

base de données du package

import (

"github.com/go-redis/redis/v8"

)

var client *redis.Client

func Init() {

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

}

func GetBooks() ([]Livre, erreur) {

// 从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 GetBookByID(id string) (*Book, erreur) {

// 根据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 AddBook(book *Book) erreur {

// 将图书信息存储到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

}

func DeleteBook(id string) erreur {

// 从Redis中删除图书
err := client.Del("book:" + id).Err()
if err != nil {
  return err
}

return nil

}

type Book struct {

ID string
Name string
Author string
Year string

}

Dans le fichier database.go, nous définissons certaines fonctions qui interagissent avec la base de données Redis et initialisons un client Redis. Ces fonctions incluent l'obtention de tous les livres, l'obtention de livres par pièce d'identité, l'ajout de livres et la suppression de livres.

Remarque : Ici, nous stockons les informations relatives au livre dans Redis et utilisons la structure de données Hash pour le stockage.

5. Écriture de la couche d'interface API
En langage Go, nous pouvons utiliser le package net/http de la bibliothèque standard pour écrire l'API Web. Créez un fichier nommé main.go dans le répertoire racine du projet et écrivez le code suivant :

package main

import (

"encoding/json"
"github.com/gorilla/mux"
"io/ioutil"
"net/http"
"online_library/database"

)

func main() {

// 初始化数据库
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 GetBooksHandler(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 GetBookByIDHandler(w http.ResponseWriter, r *http.Request) {

// 获取图书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 AddBookHandler(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)

}

func DeleteBookHandler(w http.ResponseWriter, r *http.Request) {

// 获取图书ID
vars := mux.Vars(r)
id := vars["id"]

// 删除图书
err := database.DeleteBook(id)
if err != nil {
  http.Error(w, err.Error(), http.StatusInternalServerError)
  return
}

// 返回成功状态
w.WriteHeader(http.StatusOK)

}

Dans le fichier main.go, nous avons défini certaines fonctions de traitement de l'interface API et créé un routeur basé sur mux. Ces fonctions incluent l'obtention de tous les livres, l'obtention de livres par pièce d'identité, l'ajout de livres et la suppression de livres.

6. Exécution et tests
Après avoir terminé l'écriture du code ci-dessus, nous pouvons exécuter le projet et le tester. Exécutez la commande suivante dans le terminal :

$ go run .

Ensuite, nous pouvons utiliser des outils tels que Postman ou curl pour tester l'interface API. Voici quelques exemples de demandes :

  • Obtenez tous les livres : GET http://localhost:8080/books
  • Obtenez des livres par ID : GET http://localhost:8080/books/1
  • Ajoutez des livres : POST http : //localhost:8080/books
    Corps de la requête : {"id": "1", "name": "Introduction à la langue Go", "author": "Zhang San", "year": "2021"}
  • Supprimer le livre : DELETE http://localhost:8080/books/1

7. Résumé
Cet article explique comment utiliser le langage Go et Redis pour développer une bibliothèque en ligne simple. En utilisant les performances efficaces de Go et le stockage rapide des données de Redis, nous pouvons facilement créer un système de bibliothèque puissant et facile à gérer. L'article fournit également des exemples de code spécifiques et des explications pour aider les lecteurs à comprendre et à mettre en pratique ce projet. J'espère que cet article vous sera utile dans l'apprentissage du langage Go et du développement Redis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn