How to develop an online library using Go language and Redis

WBOY
Release: 2023-10-27 09:15:51
Original
889 people have browsed it

How to develop an online library using Go language and Redis

How to use Go language and Redis to develop an online library

Abstract: This article will teach you how to use Go language and Redis to develop a simple online library. By using the efficient performance of Go and the fast data storage of Redis, we can easily create a library system that is powerful and easy to manage. The article will introduce the basic knowledge of Go language, the installation and configuration of Redis, and provide specific code examples and explanations.

1. Introduction to Go language and Redis
Go language is a statically typed, compiled language developed by Google. It has good performance, concurrency support, and garbage collection capabilities, making it ideal for building efficient backend services. Redis is a memory-based key-value storage database that provides high-performance, durable data storage solutions. Using Go language and Redis, we can build a fast and scalable online library system.

2. Install Go language and Redis
First, you need to install Go language and Redis. Please select the appropriate installation package for installation depending on the operating system. After the installation is complete, configure the environment variables of the Go language and Redis.

3. Initialize Go language project
Open the terminal and create a new Go language project:

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

Run the above command in the terminal, a folder named online_library will be created and a go.mod file will be generated.

4. Writing the database access layer
In the Go language, we can use the Redis client library to access the database. First, run the following command to install the Go client library for Redis:

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

Create a file named database in the root directory of the project .go file and write the following code:

package database

import (

"github.com/go-redis/redis/v8"
Copy after login

)

var client *redis.Client

func Init() {

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

}

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
Copy after login

}

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
Copy after login

}

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
Copy after login

}

func DeleteBook( id string) error {

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

return nil
Copy after login

}

type Book struct {

ID string
Name string
Author string
Year string
Copy after login

}

In the database.go file, we define some Database interaction function and initializes a Redis client. These functions include getting all books, getting books by ID, adding books, and deleting books.

Note: Here we store the book-related information in Redis and use the Hash data structure for storage.

5. Writing API interface layer
In Go language, we can use the net/http package of the standard library to write Web API. Create a file named main.go in the root directory of the project and write the following code:

package main

import (

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

)

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)
Copy after login

}

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)
Copy after login

}

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)
Copy after login

}

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)
Copy after login

}

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)
Copy after login

}

In the main.go file, we define some API interfaces handles the function and creates a mux-based router. These functions include getting all books, getting books by ID, adding books, and deleting books.

6. Running and testing
After completing the writing of the above code, we can run the project and test it. Run the following command in the terminal:

$ go run .

Next, we can use tools such as Postman or curl to test the API interface. Here are some sample requests:

  • Get all books: GET http://localhost:8080/books
  • Get books by ID: GET http://localhost:8080/books /1
  • Add books: POST http://localhost:8080/books
    Request body: {"id": "1", "name": "Getting Started with Go Language", "author": "Zhang San", "year": "2021"}
  • Delete books: DELETE http://localhost:8080/books/1

7. Summary
This article Introduces how to develop a simple online library using Go language and Redis. By using the efficient performance of Go and the fast data storage of Redis, we can easily create a library system that is powerful and easy to manage. The article also provides specific code examples and explanations to help readers understand and practice this project. I hope this article will be helpful to you in learning Go language and Redis development.

The above is the detailed content of How to develop an online library using Go language and Redis. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template