答案:使用Golang和MySQL实现图书管理系统,通过database/sql包和go-sql-driver/mysql驱动完成数据库连接,定义Book结构体对应数据表字段,封装增删改查操作并测试。

用 Golang 做一个图书管理系统,核心是实现对图书数据的增删改查(CRUD)并连接数据库持久化存储。下面以 MySQL 为例,演示如何使用 Go 的 database/sql 包和第三方驱动 go-sql-driver/mysql 完成一个简单的图书管理系统。
1. 环境准备与依赖安装
确保已安装 Go 和 MySQL。创建项目目录后,初始化模块:
mkdir book-manager
cd book-manager
go mod init book-manager
安装 MySQL 驱动:
go get -u github.com/go-sql-driver/mysql
2. 数据库设计与建表
在 MySQL 中创建数据库和图书表:
立即学习“go语言免费学习笔记(深入)”;
CREATE DATABASE bookdb;
USE bookdb;
CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
isbn VARCHAR(13) UNIQUE NOT NULL,
published_year YEAR,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3. 定义图书结构体与数据库连接
创建 main.go 文件,定义 Book 结构体并初始化数据库连接:
package mainimport ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql")type Book struct { ID int Title string Author string ISBN string PublishedYear int CreatedAt string}var db *sql.DBfunc initDB() { var err error dsn := "root:yourpassword@tcp(127.0.0.1:3306)/bookdb" db, err = sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } if err = db.Ping(); err != nil { log.Fatal(err) } fmt.Println("数据库连接成功")}
4. 实现 CRUD 操作函数
添加以下函数实现基本操作:
插入图书(Create)
func createBook(book Book) { query := `INSERT INTO books (title, author, isbn, published_year) VALUES (?, ?, ?, ?)` result, err := db.Exec(query, book.Title, book.Author, book.ISBN, book.PublishedYear) if err != nil { log.Fatal(err) } id, _ := result.LastInsertId() fmt.Printf("图书插入成功,ID: %dn", id)}
查询所有图书(Read)
func getAllBooks() []Book { rows, err := db.Query("SELECT id, title, author, isbn, published_year, created_at FROM books") if err != nil { log.Fatal(err) } defer rows.Close() var books []Book for rows.Next() { var b Book err := rows.Scan(&b.ID, &b.Title, &b.Author, &b.ISBN, &b.PublishedYear, &b.CreatedAt) if err != nil { log.Fatal(err) } books = append(books, b) } return books}
根据 ID 查询图书
func getBookByID(id int) Book { var b Book query := "SELECT id, title, author, isbn, published_year, created_at FROM books WHERE id = ?" err := db.QueryRow(query, id).Scan( &b.ID, &b.Title, &b.Author, &b.ISBN, &b.PublishedYear, &b.CreatedAt, ) if err != nil { log.Fatal(err) } return b}
更新图书(Update)
func updateBook(book Book) { query := `UPDATE books SET title=?, author=?, isbn=?, published_year=? WHERE id=?` _, err := db.Exec(query, book.Title, book.Author, book.ISBN, book.PublishedYear, book.ID) if err != nil { log.Fatal(err) } fmt.Printf("图书 ID %d 更新成功n", book.ID)}
删除图书(Delete)
func deleteBook(id int) { query := "DELETE FROM books WHERE id = ?" _, err := db.Exec(query, id) if err != nil { log.Fatal(err) } fmt.Printf("图书 ID %d 删除完成n", id)}
5. 编写主函数测试功能
在 main() 中调用上述函数:
func main() { initDB() defer db.Close() // 插入新书 newBook := Book{ Title: "Go语言编程", Author: "谢孟军", ISBN: "9787121227579", PublishedYear: 2018, } createBook(newBook) // 查询全部 books := getAllBooks() for _, b := range books { fmt.Printf("书名: %s, 作者: %s, ISBN: %sn", b.Title, b.Author, b.ISBN) } // 更新图书 bookToUpdate := books[0] bookToUpdate.Title = "Go语言实战" updateBook(bookToUpdate) // 删除图书(可选) // deleteBook(1)}
运行程序:
go run main.go
基本上就这些。通过这个示例,你已经实现了 Golang 图书管理系统的基础 CRUD 功能,并完成了与 MySQL 的集成。后续可扩展加入 Web 接口(如使用 Gin 框架)、输入验证、分页查询等功能。
以上就是Golang 如何做一个图书管理系统_Golang CRUD 操作与数据库集成示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1423605.html
微信扫一扫
支付宝扫一扫