protoc-gen-idmsg

command
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 13, 2026 License: MIT Imports: 12 Imported by: 0

README

流程

解析 proto 文件,生成客户端和服务器需要的协议文件

安装

# 安装可执行二进制到 $GOPATH/bin
go install .

基本使用

protoc --idmsg_out=. proto/*.proto
# 生成 v1 版本的协议
protoc --idmsg_out=v1:. proto/*.proto

即可在当前目录输出 msg.gomsg.ts

调试

  1. 在项目里运行时,带上 allow_save 即可在当前目录生成 req.bin,如: protoc --idmsg_out=allow_save=. proto/*.proto
  2. 使用 -f req.bin 启动项目,即可进行调试

生成文件内容

msg.ts 按照 code 码排序

// Code generated by protoc-gen-idmsg. DO NOT EDIT.

let Protocol = {
	HEARTBEAT: "/v1/heartbeat",
	LOGIN: "/base/login",
	COSTUME_LIST: "/v1/item/add",
	ACTOR_UPDATE: "/v1/actor/update",
}

export Protocol

let ProtocolRouter = {} // 协议名:[code, req, rsp]

ProtocolRouter[Protocol.HEARTBEAT] = [800, "Empty", "Empty"]
ProtocolRouter[Protocol.LOGIN] = [1000, "BaseLoginReq", "LoginRsp"]
ProtocolRouter[Protocol.COSTUME_LIST] = [2001, "ItemUpdate", "Empty"]
ProtocolRouter[Protocol.ACTOR_UPDATE] = [4001, "ActorUpdateReq", "Actor"]

export ProtocolRouter

let ProtocolId = {} // 协议id: [router, req, rsp]
ProtocolRouter[800] = [Protocol.HEARTBEAT, "Empty", "Empty"]
ProtocolRouter[1000] = [Protocol.LOGIN, "BaseLoginReq", "LoginRsp"]
ProtocolRouter[2001] = [Protocol.COSTUME_LIST, "ItemUpdate", "Empty"]
ProtocolRouter[4001] = [Protocol.ACTOR_UPDATE, "ActorUpdateReq", "Actor"]

export ProtocolId

msg.go 按照字符序

// Code generated by protoc-gen-idmsg. DO NOT EDIT.

package pb

import (
	"google.golang.org/protobuf/proto"
	"gs-go/core/msgdef"
)

var (
	MethodRouter = map[string]*msgdef.MethodItem{
		"/v1/base/login": {Method: "Base.BaseLogin", Auth: 0, Cmd: int32(CMD_LOGIN)},
		"/v1/server/info": {Method: "Game.ServerInfo", Auth: 0, Cmd: int32(CMD_SERVER_INFO)},
	}
	IdMsg = map[int32]*msgdef.ReqItem{
		int32(CMD_LOGIN): {Req: func() proto.Message { return &BaseLoginReq{} }, Rsp: func() proto.Message { return &LoginRsp{} }, Auth: 0, Name: "/v1/base/login"},
		int32(CMD_SERVER_INFO): {Req: func() proto.Message { return &ServerInfoReq{} }, Rsp: func() proto.Message { return &ServerInfoRsp{} }, Auth: 0, Name: "/v1/server/info"},
	}
)
type MsgDefStruct struct{}

func (m *MsgDefStruct) GetMethodRouter() map[string]*msgdef.MethodItem {
	return MethodRouter
}
func (m *MsgDefStruct) GetIdMsg() map[int32]*msgdef.ReqItem {
	return IdMsg
}

var MsgDef = &MsgDefStruct{}

原理解释

protoc 会对 proto 文件进行分析,得到语法树,解析成 CodeGeneratorRequest, 返回 CodeGeneratorResponse

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL