# 介绍

基于proto文件可以快速生成`warden`框架对应的代码，提前需要准备以下工作：

* 安装`kratos tool protoc`工具，请看[kratos工具](kratos-tool.md)
* 编写`proto`文件，示例可参考[kratos-demo内proto文件](https://github.com/go-kratos/kratos-demo/blob/master/api/api.proto)

### kratos工具说明

`kratos tool protoc`工具可以生成`warden` `bm` `swagger`对应的代码和文档，想要单独生成`warden`代码只需加上`--grpc`如：

```shell
# generate gRPC
kratos tool protoc --grpc api.proto
```

# 使用

建议在项目`api`目录下编写`proto`文件及生成对应的代码，可参考[kratos-demo内的api目录](https://github.com/go-kratos/kratos-demo/tree/master/api)。

执行命令后生成的`api.pb.go`代码，注意其中的`DemoClient`和`DemoServer`，其中：

* `DemoClient`接口为客户端调用接口，相对应的有`demoClient`结构体为其实现
* `DemoServer`接口为服务端接口声明，需要业务自己实现该接口的所有方法，`kratos`建议在`internal/service`目录下使用`Service`结构体实现

`internal/service`内的`Service`结构实现了`DemoServer`接口可参考[kratos-demo内的service](https://github.com/go-kratos/kratos-demo/blob/master/internal/service/service.go)内的如下代码：

```go
// SayHelloURL bm demo func.
func (s *Service) SayHelloURL(ctx context.Context, req *pb.HelloReq) (reply *pb.HelloResp, err error) {
	reply = &pb.HelloResp{
		Content: "hello " + req.Name,
	}
	fmt.Printf("hello url %s", req.Name)
	return
}
```

更详细的客户端和服务端使用请看[warden快速开始](warden-quickstart.md)

# 扩展阅读

[warden快速开始](warden-quickstart.md)  
[warden拦截器](warden-mid.md)  
[warden负载均衡](warden-balancer.md)  
[warden服务发现](warden-resolver.md)


