Shippy 开源项目使用教程
1. 项目的目录结构及介绍
Shippy 项目的目录结构如下:
shippy/
├── cmd/
│ ├── cli/
│ │ └── main.go
│ └── server/
│ └── main.go
├── config/
│ └── config.go
├── docker/
│ ├── Dockerfile
│ └── docker-compose.yml
├── pkg/
│ ├── auth/
│ ├── consignment/
│ ├── container/
│ ├── user/
│ └── vessel/
├── proto/
│ ├── consignment/
│ ├── container/
│ ├── user/
│ └── vessel/
├── scripts/
│ └── setup.sh
└── README.md
目录结构介绍
- cmd/: 包含项目的入口文件,分为命令行工具
cli
和服务端server
。 - config/: 包含项目的配置文件。
- docker/: 包含 Docker 相关的文件,如 Dockerfile 和 docker-compose.yml。
- pkg/: 包含项目的核心逻辑,按模块划分,如
auth
,consignment
,container
,user
,vessel
。 - proto/: 包含项目的 Protocol Buffers 文件,按模块划分。
- scripts/: 包含项目的脚本文件,如设置脚本
setup.sh
。 - README.md: 项目的说明文档。
2. 项目的启动文件介绍
服务端启动文件
服务端的启动文件位于 cmd/server/main.go
。该文件负责启动 gRPC 服务,并加载必要的配置和依赖。
package main
import (
"log"
"net"
"github.com/EwanValentine/shippy/config"
"github.com/EwanValentine/shippy/pkg/consignment"
"google.golang.org/grpc"
)
func main() {
cfg, err := config.LoadConfig()
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
lis, err := net.Listen("tcp", cfg.ServerAddress)
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
s := grpc.NewServer()
consignment.RegisterShippingServiceServer(s, &consignment.Service{})
log.Printf("Starting server on %s", cfg.ServerAddress)
if err := s.Serve(lis); err != nil {
log.Fatalf("Failed to serve: %v", err)
}
}
命令行工具启动文件
命令行工具的启动文件位于 cmd/cli/main.go
。该文件负责处理命令行输入,并与 gRPC 服务进行交互。
package main
import (
"context"
"log"
"os"
"github.com/EwanValentine/shippy/pkg/consignment"
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("Did not connect: %v", err)
}
defer conn.Close()
client := consignment.NewShippingServiceClient(conn)
consignment, err := consignment.ParseConsignment(os.Args[1])
if err != nil {
log.Fatalf("Could not parse consignment: %v", err)
}
resp, err := client.CreateConsignment(context.Background(), consignment)
if err != nil {
log.Fatalf("Could not create consignment: %v", err)
}
log.Printf("Created: %t", resp.Created)
}
3. 项目的配置文件介绍
项目的配置文件位于 config/config.go
。该文件定义了项目的配置结构体和加载配置的方法。
package config
import (
"github.com/spf13/viper"
)
type Config struct {
ServerAddress string `mapstructure:"SERVER_ADDRESS"`
DBHost string `mapstructure:"DB