go-grpc

本文详细介绍了如何使用Golang与Protocol Buffers (Protobuf) 创建并部署GRPC服务,包括环境搭建、协议文件编写、代码生成、服务端与客户端示例。从安装工具到实际操作,为读者提供了一个完整的开发指南。
摘要由CSDN通过智能技术生成

1、环境搭建

# 安装官方的protoc工具
https://github.com/protocolbuffers/protobuf/releases
# 生成golang代码生成插件
go get -u github.com/golang/protobuf/protoc-gen-go
# 安装protoc引入的依赖
go get google.golang.org/protobuf/reflect/protoreflect
go get google.golang.org/protobuf/runtime/protoimpl

2、写代码

2.1、 定义协议文件

协议文件 gym.proto

syntax = "proto3";
// 1.14 后增加 go_package option
option go_package = "../gym";

//健身房
service Gym {
  rpc BodyBuilding (Person) returns (Reply) {

  }
}
//谁在健身
message Person {
  string name = 1;
  repeated string actions = 2;
}

//结果
message Reply {
  int32 code = 1;
  string msg = 2;
}

2.2、生成代码

在协议文件目录下

 protoc --go_out=plugins=grpc:./  gym.proto

2.3、服务端代码

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"log"
	"mygoing/gym"
	"net"
)

type server struct {
	gym.UnimplementedGymServer
}

func (s server) BodyBuilding(ctx context.Context, p *gym.Person) (*gym.Reply, error) {
	fmt.Printf("%s正在健身, 动作: %s\n\n", p.Name, p.Actions)
	return &gym.Reply{Code: 0, Msg: "ok"}, nil
}

func main() {
	listen, err := net.Listen("tcp", ":8090")
	if err != nil {
		log.Fatalln(err)
	}
	s := grpc.NewServer()
	gym.RegisterGymServer(s, &server{})
	if err := s.Serve(listen); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}

2.4、客户端代码

package main

import (
	"context"
	"google.golang.org/grpc"
	"log"
	"mygoing/gym"
	"time"
)

const address = "localhost:8090"

func main() {
	conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
	if err != nil {
		log.Fatalln("connection failed")
	}
	defer conn.Close()
	client := gym.NewGymClient(conn)
	ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second)
	defer cancelFunc()
	r, err := client.BodyBuilding(ctx, &gym.Person{Name: "jack", Actions: []string{"xx", "yy"},
	})
	if err != nil {
		log.Fatalf("error: %v", err)
	}
	log.Printf("code %d, msg: %s\n", r.Code, r.Msg)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 错误提示中提到了一个未知的标志"--go-grpc",这可能是因为你的命令中使用了错误的标志。正确的命令应该是"protoc --go-grpc_out=. --go-grpc_opt=paths=source_relative user.proto"。请注意,标志"--go-grpc_out"和"--go-grpc_opt"之间应该有一个下划线"_",而不是一个空格。另外,你还需要确保你已经安装了正确的go协议编译器插件。你可以使用以下命令重新安装插件:"$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest"和"$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest"。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [使用protoc编译grpc问题记录(--go_out: protoc-gen-go: plugins are not supported;)](https://blog.csdn.net/m0_57777971/article/details/127864341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [protoc-gen-go: plugin are not supported;use ‘protoc --go-grpc_out=...‘ to generate gRPC 的问题](https://blog.csdn.net/weixin_42875684/article/details/125652895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值