Go Academy
trpc-go 专题
75 分钟

C2: 实现 trpc-go 服务

从零开始构建一个 trpc-go 服务,包含用户认证功能

学习目标

  • 1.搭建 trpc-go 项目结构
  • 2.定义 Protobuf 服务接口
  • 3.实现服务端业务逻辑

课程内容

本课时将帮助你快速掌握相关知识。以下是示例代码:

main.go
1package main
2
3import "fmt"
4
5func main() {
6 fmt.Println("Hello, Go!")
7
8 // Go 的变量声明
9 var name string = "TypeScript Developer"
10 age := 25 // 短变量声明
11
12 fmt.Printf("Name: %s, Age: %d\n", name, age)
13}

上面的代码演示了 Go 的基本语法,包括包声明、导入和变量声明。 注意第 8 行的短变量声明语法 :=,这是 Go 的特色。

与 TypeScript 对比

example.ts
// TypeScript 版本
const name: string = "TypeScript Developer";
const age = 25; // 类型推断
console.log(`Name: ${name}, Age: ${age}`);

实战练习

实现用户注册服务

高级

基于 trpc-go 实现一个用户注册的 RPC 方法

初始代码

Go
1// user.proto 已定义,请实现服务端代码
2package main
3
4// 请实现 UserService 的 Register 方法
查看参考答案
Go
1package main
2
3import (
4 "context"
5 pb "your/proto/user"
6)
7
8type userServiceImpl struct {
9 pb.UnimplementedUserServiceServer
10}
11
12func (s *userServiceImpl) Register(ctx context.Context, req *pb.RegisterRequest) (*pb.RegisterResponse, error) {
13 // 验证输入
14 if req.Username == "" || req.Password == "" {
15 return nil, errors.New("username and password required")
16 }
17
18 // 创建用户(简化示例)
19 user := &pb.User{
20 Id: generateID(),
21 Username: req.Username,
22 }
23
24 return &pb.RegisterResponse{User: user}, nil
25}