Goa Design 示例项目教程
1. 项目目录结构及介绍
goadesign/examples/
├── README.md
├── api/
│ ├── design/
│ │ └── design.go
│ └── gen/
│ ├── client/
│ ├── endpoints/
│ ├── openapi/
│ └── service/
├── cmd/
│ └── goa-example/
│ └── main.go
├── config/
│ └── config.yaml
└── go.mod
目录结构说明
- README.md: 项目介绍文件,包含项目的基本信息和使用说明。
- api/: 包含API设计和生成的代码。
- design/: 包含API的设计文件,通常使用Goa DSL编写。
- gen/: 包含根据设计文件生成的代码,包括客户端代码、端点代码、OpenAPI文档和服务的实现。
- cmd/: 包含项目的启动文件。
- goa-example/: 包含项目的入口文件
main.go
。
- goa-example/: 包含项目的入口文件
- config/: 包含项目的配置文件。
- config.yaml: 项目的配置文件,用于配置服务的行为和参数。
- go.mod: Go模块文件,定义项目的依赖关系。
2. 项目启动文件介绍
cmd/goa-example/main.go
package main
import (
"context"
"log"
"net/http"
"goa.design/goa/v3/middleware"
"goa-example/gen/http/calc/server"
"goa-example/gen/calc"
)
func main() {
// 创建服务
service := calc.NewService()
// 注册HTTP服务器
http.Handle("/", server.New(service, nil))
// 启动HTTP服务器
log.Println("Starting HTTP server on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
启动文件说明
- main.go: 项目的入口文件,负责初始化服务并启动HTTP服务器。
- service: 创建一个服务实例。
- http.Handle: 注册HTTP服务器,将生成的服务器代码与服务实例绑定。
- http.ListenAndServe: 启动HTTP服务器,监听端口8080。
3. 项目配置文件介绍
config/config.yaml
server:
port: 8080
log_level: info
database:
host: localhost
port: 5432
user: postgres
password: postgres
name: goa_example
配置文件说明
- server: 配置服务器的参数。
- port: 服务器监听的端口。
- log_level: 日志级别,如
info
、debug
等。
- database: 配置数据库连接参数。
- host: 数据库主机地址。
- port: 数据库端口。
- user: 数据库用户名。
- password: 数据库密码。
- name: 数据库名称。
通过以上配置文件,可以灵活地调整服务器和数据库的行为。