Heim  >  Artikel  >  Backend-Entwicklung  >  So entwickeln Sie eine Online-Bibliothek mit der Sprache Go und Redis

So entwickeln Sie eine Online-Bibliothek mit der Sprache Go und Redis

WBOY
WBOYOriginal
2023-10-27 09:15:51877Durchsuche

So entwickeln Sie eine Online-Bibliothek mit der Sprache Go und Redis

So verwenden Sie Go-Sprache und Redis, um eine Online-Bibliothek zu entwickeln

Zusammenfassung: In diesem Artikel erfahren Sie, wie Sie Go-Sprache und Redis verwenden, um eine einfache Online-Bibliothek zu entwickeln. Durch die effiziente Leistung von Go und die schnelle Datenspeicherung von Redis können wir problemlos ein Bibliothekssystem erstellen, das leistungsstark und einfach zu verwalten ist. Der Artikel stellt die Grundkenntnisse der Go-Sprache sowie die Installation und Konfiguration von Redis vor und bietet spezifische Codebeispiele und Erklärungen.

1. Einführung in die Go-Sprache und Redis
Die Go-Sprache ist eine statisch typisierte, kompilierte Sprache, die von Google entwickelt wurde. Es verfügt über eine gute Leistung, Parallelitätsunterstützung und Speicherbereinigungsfunktionen, was es ideal für den Aufbau effizienter Backend-Dienste macht. Redis ist eine speicherbasierte Schlüsselwertspeicherdatenbank, die leistungsstarke, dauerhafte Datenspeicherlösungen bietet. Mit der Sprache Go und Redis können wir ein schnelles und skalierbares Online-Bibliothekssystem aufbauen.

2. Go-Sprache und Redis installieren
Zuerst müssen Sie Go-Sprache und Redis installieren. Bitte wählen Sie je nach Betriebssystem das entsprechende Installationspaket zur Installation aus. Konfigurieren Sie nach Abschluss der Installation die Umgebungsvariablen der Go-Sprache und Redis.

3. Initialisieren Sie das Go-Sprachprojekt
Öffnen Sie das Terminal und erstellen Sie ein neues Go-Sprachprojekt:

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

Führen Sie den obigen Befehl aus Terminal wird ein Ordner mit dem Namen online_library erstellt und eine go.mod-Datei generiert.

4. Schreiben Sie die Datenbankzugriffsschicht
In der Go-Sprache können wir die Redis-Clientbibliothek verwenden, um auf die Datenbank zuzugreifen. Installieren Sie zunächst die Go-Client-Bibliothek für Redis, indem Sie den folgenden Befehl ausführen:

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

Erstellen Sie eine Datei mit dem Namen „database.go“ im Stammverzeichnis des Projekts und schreiben Sie die folgender Code:

Paketdatenbank

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() ([]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 GetBookByID(id string) (*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 AddBook(book *Book) error {

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

// 从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

}

In der Datei „database.go“ definieren wir einige Funktionen, die mit der Redis-Datenbank interagieren und einen Redis-Client initialisieren. Zu diesen Funktionen gehören das Abrufen aller Bücher, das Abrufen von Büchern nach ID, das Hinzufügen von Büchern und das Löschen von Büchern.

Hinweis: Hier speichern wir die buchbezogenen Informationen in Redis und verwenden die Hash-Datenstruktur zur Speicherung.

5. Schreiben der API-Schnittstellenschicht
In der Go-Sprache können wir das Net/http-Paket der Standardbibliothek verwenden, um eine Web-API zu schreiben. Erstellen Sie eine Datei mit dem Namen main.go im Stammverzeichnis des Projekts und schreiben Sie den folgenden Code:

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)

}

In der Datei main.go haben wir einige API-Schnittstellenverarbeitungsfunktionen definiert und einen Mux-basierten Router erstellt. Zu diesen Funktionen gehören das Abrufen aller Bücher, das Abrufen von Büchern nach ID, das Hinzufügen von Büchern und das Löschen von Büchern.

6. Ausführen und Testen
Nachdem wir das Schreiben des obigen Codes abgeschlossen haben, können wir das Projekt ausführen und testen. Führen Sie den folgenden Befehl im Terminal aus:

$ go run .

Als nächstes können wir Tools wie Postman oder Curl verwenden, um die API-Schnittstelle zu testen. Hier sind einige Beispielanfragen:

  • Alle Bücher abrufen: GET http://localhost:8080/books
  • Bücher nach ID abrufen: GET http://localhost:8080/books/1
  • Bücher hinzufügen: POST http: //localhost:8080/books
    Anfragetext: {"id": "1", "name": "Einführung in die Go-Sprache", "Autor": "Zhang San", "Jahr": "2021"}
  • Buch löschen: DELETE http://localhost:8080/books/1

7. Zusammenfassung
In diesem Artikel wird erläutert, wie Sie mit der Go-Sprache und Redis eine einfache Online-Bibliothek entwickeln. Durch die effiziente Leistung von Go und die schnelle Datenspeicherung von Redis können wir problemlos ein Bibliothekssystem erstellen, das leistungsstark und einfach zu verwalten ist. Der Artikel enthält außerdem spezifische Codebeispiele und Erklärungen, um den Lesern das Verständnis und die Übung dieses Projekts zu erleichtern. Ich hoffe, dass dieser Artikel Ihnen beim Erlernen der Go-Sprache und der Redis-Entwicklung hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonSo entwickeln Sie eine Online-Bibliothek mit der Sprache Go und Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn