go语言制作简单图书管理系统

简介: go语言制作简单图书管理系统

go语言制作简单图书管理系统

首先没有编译器的可以通过这个网址进行敲代码:Lightly

题目要求

简单的 Go 语言图书管理系统的示例代码,包括添加图书、删除图书、查找图书和显示所有图书的功能。

代码讲解

基础部分

  1. 首先,我们定义了一个名为 book 的结构体类型,包含 id、title 和 author 三个字段。其中,id 表示图书编号,title 表示图书标题,author 表示图书作者。
type book struct {
    id     int
    title  string
    author string
}
  1. 然后,我们使用 map 来存储所有图书,key 为图书编号(int 类型),value 为 book 类型。
var books = make(map[int]book)
  1. 接着,我们定义了一个 lastID 变量来记录最后添加的图书编号,初始值为 0。
var lastID = 0

下面,我们实现了四个函数,分别实现添加图书、删除图书、查找图书和显示所有图书的功能。

方法定义

添加图书

addBook 函数可以用来添加一本新图书。它需要传入两个参数:图书标题和图书作者。在函数内部,我们首先增加 lastID 的值并将其赋给新添加的图书的 id 字段,然后将图书信息存储到 books map 中,并输出添加成功的提示信息。

func addBook(title, author string) {
    lastID++
    books[lastID] = book{id: lastID, title: title, author: author}
    fmt.Printf("成功添加图书,编号为 %d\n", lastID)
}
删除图书

deleteBook 函数可以根据图书编号删除一本已有的图书。它需要传入一个参数:要删除的图书编号。在函数内部,我们首先判断该编号对应的图书是否存在于 books map 中,如果存在则从 map 中删除该条数据,并输出删除成功的提示信息;否则,输出图书不存在的提示信息。

func deleteBook(id int) {
    if _, ok := books[id]; ok {
        delete(books, id)
        fmt.Printf("成功删除图书,编号为 %d\n", id)
    } else {
        fmt.Printf("图书不存在,编号为 %d\n", id)
    }
}
查找图书

searchBook 函数可以根据关键字查找所有符合条件的图书并输出结果。它需要传入一个参数:要查找的关键字。在函数内部,我们遍历所有的图书信息,如果图书标题或作者中包含了关键字,则输出该图书的相关信息。

func searchBook(keyword string) {
    for _, b := range books {
        if b.title == keyword || b.author == keyword {
            fmt.Printf("编号:%d,标题:%s,作者:%s\n", b.id, b.title, b.author)
        }
    }
}
显示所有图书

listBooks 函数用于显示所有的图书信息。在函数内部,我们遍历所有的图书信息,并输出每个图书的相关信息。

func listBooks() {
    for _, b := range books {
        fmt.Printf("编号:%d,标题:%s,作者:%s\n", b.id, b.title, b.author)
    }
}

最后,在主函数中,我们添加了三本图书并输出它们的相关信息。然后,删除了一本编号为 2 的图书,并输出删除结果。接着,使用 searchBook 函数查找了包含 “曹雪芹” 和 “施耐庵” 的图书,并输出结果。最后,使用 listBooks 函数列出了所有的图书信息。

func main() {
    addBook("《红楼梦》", "曹雪芹")
    addBook("《西游记》", "吴承恩")
    addBook("《水浒传》", "施耐庵")
    deleteBook(2)
    searchBook("曹雪芹")
    searchBook("施耐庵")
    listBooks()
}
完整代码
package main
import "fmt"
type book struct {
    id     int
    title  string
    author string
}
var books = make(map[int]book)
var lastID = 0
func addBook(title, author string) {
    lastID++
    books[lastID] = book{id: lastID, title: title, author: author}
    fmt.Printf("成功添加图书,编号为 %d\n", lastID)
}
func deleteBook(id int) {
    if _, ok := books[id]; ok {
        delete(books, id)
        fmt.Printf("成功删除图书,编号为 %d\n", id)
    } else {
        fmt.Printf("图书不存在,编号为 %d\n", id)
    }
}
func searchBook(keyword string) {
    for _, b := range books {
        if b.title == keyword || b.author == keyword {
            fmt.Printf("编号:%d,标题:%s,作者:%s\n", b.id, b.title, b.author)
        }
    }
}
func listBooks() {
    for _, b := range books {
        fmt.Printf("编号:%d,标题:%s,作者:%s\n", b.id, b.title, b.author)
    }
}
func main() {
    addBook("《红楼梦》", "曹雪芹")
    addBook("《西游记》", "吴承恩")
    addBook("《水浒传》", "施耐庵")
    deleteBook(2)
    searchBook("曹雪芹")
    searchBook("施耐庵")
    listBooks()
}

运行结果:

相关文章
|
8天前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
1天前
|
安全 Java Go
探索Go语言在高并发环境中的优势
在当今的技术环境中,高并发处理能力成为评估编程语言性能的关键因素之一。Go语言(Golang),作为Google开发的一种编程语言,以其独特的并发处理模型和高效的性能赢得了广泛关注。本文将深入探讨Go语言在高并发环境中的优势,尤其是其goroutine和channel机制如何简化并发编程,提升系统的响应速度和稳定性。通过具体的案例分析和性能对比,本文揭示了Go语言在实际应用中的高效性,并为开发者在选择合适技术栈时提供参考。
|
5天前
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
22 1
|
5天前
|
SQL 关系型数据库 MySQL
Go语言中使用 sqlx 来操作 MySQL
Go语言因其高效的性能和简洁的语法而受到开发者们的欢迎。在开发过程中,数据库操作不可或缺。虽然Go的标准库提供了`database/sql`包支持数据库操作,但使用起来稍显复杂。为此,`sqlx`应运而生,作为`database/sql`的扩展库,它简化了许多常见的数据库任务。本文介绍如何使用`sqlx`包操作MySQL数据库,包括安装所需的包、连接数据库、创建表、插入/查询/更新/删除数据等操作,并展示了如何利用命名参数来进一步简化代码。通过`sqlx`,开发者可以更加高效且简洁地完成数据库交互任务。
12 1
|
11天前
|
XML JSON Go
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
|
11天前
|
程序员 Go
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
|
5天前
|
算法 NoSQL 中间件
go语言后端开发学习(六) ——基于雪花算法生成用户ID
本文介绍了分布式ID生成中的Snowflake(雪花)算法。为解决用户ID安全性与唯一性问题,Snowflake算法生成的ID具备全局唯一性、递增性、高可用性和高性能性等特点。64位ID由符号位(固定为0)、41位时间戳、10位标识位(含数据中心与机器ID)及12位序列号组成。面对ID重复风险,可通过预分配、动态或统一分配标识位解决。Go语言实现示例展示了如何使用第三方包`sonyflake`生成ID,确保不同节点产生的ID始终唯一。
go语言后端开发学习(六) ——基于雪花算法生成用户ID
|
6天前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
11天前
|
存储 编译器 Go
Go语言中的逃逸分析
Go语言中的逃逸分析
|
11天前
|
存储 Go
掌握 Go 语言的 defer 关键字
掌握 Go 语言的 defer 关键字