2 项目介绍
2.1 项目功能
本文创建一个应用是一个简单的 RESTful API 服务器:线上书店,它将公开书籍的访问和操作,主要包括如下功能:
- 创建一本书籍
- 获取书籍清单
- 获取一本书籍信息
- 更新已有书籍信息
- 删除一本书籍
2.2 API 接口规范
为了实现上述的功能,我们的应用需要提供给外界如下的 API 接口规范:
- 创建一本书籍:通过
/book
响应有效的 POST 请求 - 获取书籍清单:通过
/books
响应有效的 GET 请求 - 获取一本书籍:通过
/book/{id}
响应对应的 GET 请求 - 更新一本书籍:通过
/book/{id}
响应对应的 PUT 请求 - 删除一本书籍:通过
/book/{id}
响应对应的 DELETE 请求
通过 {id}
能够有效确定某本书籍。
网络异常,图片无法展示
|
2.3 项目结构
本文将创建一个非常简单的应用程序结构,这是本文使用的 mybook 应用的项目结构:
. ├── go.mod ├── go.sum ├── handlers.go ├── main.go └── model ├── database.go └── model.go
2.4 安装项目依赖
安装 go get -u github.com/gorilla/mux
,如下;
网络异常,图片无法展示
|
安装 go get -u gorm.io/gorm
安装 go get -u gorm.io/driver/postgres
网络异常,图片无法展示
|
3 应用功能设计
首先创建一个 mybook 的目录(应用文件夹),然后使用 go mod init mybook
,
接着在其中创建我们的 model 文件夹,接下来,在 model 文件夹下新建一个 model.go
文件。
3.1 model.go
我们需要设计出 book 模型,这里即将使用 GORM 进行创建,编写我们的 model.go
函数:
package model import ( "gorm.io/gorm" ) type Book struct { gorm.Model ID string `json:"id"` Name string `json:"name"` Author string `json:"author"` Description string `json:"description"` Price float64 `json:"price"` Category string `json:"category"` }
如上所示,书籍的结构体中进行简单设计包含 id(ID)、书名(Name)、作者(Author)、书籍描述(Description)、价格(Price)和类别(Category)。
3.2 database.go
该程序将创建数据库连接,需要使用到 postgresql://root@localhost:26257/defaultdb?sslmode=disable
传入到 gorm.Open()
的连接参数中,代码如下:
package model import ( "log" "time" "gorm.io/driver/postgres" "gorm.io/gorm" ) func SetupDB() (*gorm.DB, error) { dsn := "postgresql://root@localhost:26257/defaultdb?sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("can't connect to database", err) } var now time.Time db.Raw("SELECT NOW()").Scan(&now) log.Println(now) if err = db.AutoMigrate(&Book{}); err != nil { log.Println(err) } return db, err }