首页
/ Twirp 项目教程

Twirp 项目教程

2024-08-07 10:14:49作者:谭伦延

1. 项目的目录结构及介绍

Twirp 项目的目录结构如下:

twirp/
├── cmd/
│   └── server/
│       └── main.go
├── internal/
│   └── service/
│       └── service.go
├── proto/
│   └── service.proto
├── go.mod
├── go.sum
└── README.md

目录介绍

  • cmd/: 包含应用程序的入口点。
    • server/: 包含服务器启动文件 main.go
  • internal/: 包含内部实现细节,通常是业务逻辑。
    • service/: 包含服务实现文件 service.go
  • proto/: 包含 Protobuf 定义文件 service.proto
  • go.modgo.sum: Go 模块文件,用于管理依赖。
  • README.md: 项目说明文档。

2. 项目的启动文件介绍

项目的启动文件位于 cmd/server/main.go。以下是该文件的主要内容:

package main

import (
    "log"
    "net/http"

    "github.com/bilibili/twirp/internal/service"
    "github.com/bilibili/twirp/proto"
)

func main() {
    handler := proto.NewHaberdasherServer(service.NewHaberdasher(), nil)
    log.Println("Starting server on :8080")
    log.Fatal(http.ListenAndServe(":8080", handler))
}

启动文件介绍

  • main 函数:程序入口点。
  • proto.NewHaberdasherServer:创建 Twirp 服务器处理程序。
  • service.NewHaberdasher:初始化服务实现。
  • http.ListenAndServe:启动 HTTP 服务器,监听端口 8080。

3. 项目的配置文件介绍

Twirp 项目通常不包含传统的配置文件,而是通过代码进行配置。以下是一些常见的配置方式:

依赖管理

  • go.mod:定义项目依赖。
module github.com/bilibili/twirp

go 1.16

require (
    github.com/twitchtv/twirp v8.1.0+incompatible
    google.golang.org/protobuf v1.27.1
)

Protobuf 定义

  • proto/service.proto:定义服务接口。
syntax = "proto3";

package proto;

service Haberdasher {
    rpc MakeHat(Size) returns (Hat);
}

message Size {
    int32 inches = 1;
}

message Hat {
    int32 inches = 1;
    string color = 2;
    string name = 3;
}

服务实现

  • internal/service/service.go:实现服务逻辑。
package service

import (
    "context"
    "math/rand"

    "github.com/bilibili/twirp/proto"
)

type Haberdasher struct{}

func NewHaberdasher() *Haberdasher {
    return &Haberdasher{}
}

func (h *Haberdasher) MakeHat(ctx context.Context, size *proto.Size) (*proto.Hat, error) {
    return &proto.Hat{
        Inches: size.Inches,
        Color:  []string{"red", "green", "blue"}[rand.Intn(3)],
        Name:   "Hat",
    }, nil
}

通过以上配置和实现,可以启动一个简单的 Twirp 服务。

登录后查看全文
热门项目推荐