c7
2025-05-22 22:43:02 +08:00
2025-05-31 16:27:01 +08:00
c7
2025-05-22 22:43:02 +08:00
2025-05-22 19:39:08 +08:00
2025-05-22 19:39:08 +08:00
2025-05-31 16:27:01 +08:00
2025-05-22 19:39:08 +08:00
2025-05-31 16:27:01 +08:00
2025-05-31 16:27:01 +08:00
2025-05-31 16:27:01 +08:00
2025-05-31 16:27:01 +08:00

godemo

这是一个使用Go语言开发的示例项目用于演示Go语言的基础知识。

目录结构

godemo/                         # 项目根目录
├── README.md                   # 项目说明文档
├── go.mod                      # Go模块定义
├── go.sum                      # 依赖校验
├── docker/                     # Docker文件目录
    └── docker-gateway/         # gateway服务的Docker文件目录
        ├── etc/config.yaml     # gateway服务配置文件用于配置启动服务Optional
        ├── Dockerfile          # gateway服务的Dockerfile文件
        └── docker-compose.yml  # gateway服务的docker-compose文件
├── sql/                        # 数据库SQL定义
    └── users.sql               # 用户表SQL文件
├── api/                        # HTTP服务定义
    └── gateway.api             # gateway服务的HTTP API定义文件
├── rpc/                        # RPC服务定义
    └── user.proto              # user服务的RPC定义文件
├── user/                       # 用户服务
├── gateway/                    # 网关服务
... ...

基于.proto生成RPC服务代码

# 在项目的根目录执行以user服务为例
> goctl rpc protoc [rpc/user.proto] --go-grpc_out=[user] --go_out=[user] --zrpc_out=[user]

基于.api生成HTTP服务代码

# 在项目的根目录执行以gateway服务为例
> goctl api go -api [api/gateway.api] -dir [gateway]

基于数据库生成模型层代码

# 在项目的根目录执行以category服务为例
> goctl model pg datasource -url="postgres://postgres:postgres@localhost:19732/godemo?sslmode=disable" -schema="public" -table="categories" -dir="./category/internal/model"

说明

数据表的定义在sql目录下到postgres执行对应的数据表文件然后用上面的命令生成模型层代码。

后续模型层增加接口可以在internal/model/categoriesmodel.go中增加接口定义以category服务为例 )。

整合模型层代码

生成的模型层代码要被业务代码使用需要引入到业务代码中。主要修改三个地方以category服务为例

# etc/category.yaml 增加下面的配置
DB:
  DataSource: postgres://postgres:postgres@localhost:19732/godemo?sslmode=disable
  MaxOpenConns: 100
  MaxIdleConns: 20
  ConnMaxLifetime: 3600

# internal/config/config.go
type Config struct {
	zrpc.RpcServerConf
	DB struct {
		DataSource      string
		MaxOpenConns    int
		MaxIdleConns    int
		ConnMaxLifetime int
	}
}

# internal/svc/serviceContext.go
import (
	"godemo/category/internal/config"
	"godemo/category/internal/model"

	_ "github.com/lib/pq"
	"github.com/zeromicro/go-zero/core/stores/sqlx"
)

type ServiceContext struct {
	Config        config.Config
	CategoryModel model.CategoriesModel
}

func NewServiceContext(c config.Config) *ServiceContext {
	conn := sqlx.NewSqlConn("postgres", c.DB.DataSource)
	return &ServiceContext{
		Config:        c,
		CategoryModel: model.NewCategoriesModel(conn),
	}
}

创建Dockerfile

# 在项目的根目录执行以category服务为例
> goctl docker -go [category/category.go]

生成的Dockerfile里面有些路径需要修改也有些内容需要增加。

然后再docker目录创建[docker-category]文件夹把Dockerfile移动到docker-category文件夹下。

创建docker-compose.yml

在Dockerfile同级目录创建docker-compose.yaml内容可以参考下面的category服务的。另外需要在当前目录创建etc文件夹把服务的配置文件拷贝到etc文件夹下并命名为config.yaml。

services:
  category:
    image: category:v1
    container_name: category
    restart: always
    volumes:
      - ./etc:/app/etc
    networks:
      - godemo_network
    # 端口映射,生产环境非必须,开发环境用于方便调试
    ports:
      - "60300:60300"

networks:
  godemo_network:
    name: godemo_network
    external: true

编译Docker镜像

# 在项目的根目录执行以file服务为例
> docker build -t [file:v1] -f [docker/docker-file/Dockerfile] .

运行Docker容器

# 在对应服务的docker目录执行以file服务为例
docker/docker-file> docker compose up -d

RPC服务测试/调试

# 查看60200端口下的RPC服务提供的服务
> grpcurl -plaintext localhost:60200 list

# 查看某个服务提供的接口
> grpcurl -plaintext localhost:60200 list file.File

# 调用某个接口
> grpcurl -d '{\"file_id\": \"aaaa/333333333333.png\"}' -plaintext localhost:60200 file.File/GetFileUrl

网关服务

用户服务

接口定义

  • 用户注册
  • 用户登录
  • 获取用户信息
  • 用户注销

文件服务

分类服务

分类服务Category Service这是一个用于统一管理多系统/多模块分类体系的微服务。

  • 支持多级分类
  • 通过system_id支持多系统分类
# 增
grpcurl -plaintext -d '{\"system_id\": \"ecommerce\",\"name\": \"Electronics\",\"alias\": \"electronics\",\"parent_id\": \"\"}' localhost:60300 category.Category/CreateCategory

# 删
grpcurl -plaintext -d '{\"id\": \"fe8d31d5-11f4-4ddd-a4ac-76d358faed2b\"}' localhost:60300 category.Category/DeleteCategory

# 改
grpcurl -plaintext -d '{\"id\": \"d628cf35-539f-4533-a5a2-492d729ecf3b\",\"name\": \"New Electronics Name\"
}' localhost:60300 category.Category/UpdateCategory

# 查
grpcurl -plaintext -d '{\"id\": \"d628cf35-539f-4533-a5a2-492d729ecf3b\"}' localhost:60300 category.Category/GetCategory

图库服务

接口定义

  • 获取图片列表
  • 获取图片详情
  • 获取分类
  • 上传图片
  • 删除图片
  • 修改图片
  • 获取图片URL
  • 下载图片

/api/gallery/v1/

Description
No description provided
Readme 229 KiB
Languages
Go 95.8%
Dockerfile 2.8%
PLpgSQL 1.4%