windows下go安装并使用protobuf

这篇具有很好参考价值的文章主要介绍了windows下go安装并使用protobuf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 下载proto windows版本并安装

官方地址:protobuf
解压后复制bin目录下的protoc.exeGOPATH\bib目录中
windows protoc,golang,golang,github,prototype

2. 安装protoc-gen-go

如果使用go get -u github.com/golang/protobuf/protoc-gen-go 可能会出现如下错误:

go: module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead.go get: installing executables with 'go get' in module mode is deprecated. Use 'go install pkg@version' instead.For more information, see https://golang.org/doc/go-get-install-deprecation or run 'go help get' or 'go help install'.

使用下面的命令进行下载
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
安装成功后,在GOPATH\bib目录中可以看到proroc-gen-go.exe

两个全部安装成功后,查看下版本号
windows protoc,golang,golang,github,prototype

3. proto文件转go文件报错protoc-gen-go: unable to determine go import path for “xxxx.proto”

需要注意的是在proto文件中,记得设置option go_package属性

syntax="proto3"; //版本号
package protobuf;  //包名
option go_package ="./protobuf";

enum ClassName{   //枚举
    class1=0;  //标号 必须从 0开始
    class2=1;
    class3=2;
}

message Student{ //消息,对应于Go的结构体
  string name=1; //1:标号,唯一 即可(相当于数据库中的Id,不一定要从1 ,2的顺序依次排列。)
  int32 age=2;  //必须指定整型的范围,如int32,int64
  string address=3;
  ClassName cn=4;
}
message Students{
   repeated Student person=1;  // repeated 修饰,相当于Go中切片
   string school=2;
}

再使用protoc --go_out=. test.proto命令生成go文件
windows protoc,golang,golang,github,prototype

windows protoc,golang,golang,github,prototype

4. 生成的go文件中google.golang.org/protobuf/reflect/protoreflect依赖爆红

import(
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

GOPATH/src目录下新建google.golang.org文件夹,在该文件下使用命令:
git clone https://e.coding.net/robinqiwei/googleprotobuf.git protobuf

windows protoc,golang,golang,github,prototype
重新保存生成的xxx.pb.go文件,爆红消失
windows protoc,golang,golang,github,prototype

5. 基本使用

  • 创建一个.proto文件(用于定义某些需要传输的message格式)
  • 编译proto文件,可以使用protoc --go_out=. *.proto一次性编译当前文件夹下的多个proto文件
  • 编译完成后,protoc编译器将proto文件编译成.pb.go文件
syntax = "proto3"; // 版本信息,不指定会报错
package pb; //生成go文件的包名
option go_package ="./pb"; // 表示在当前文件夹下的pb包中
// message为关键字 用于定义一种消息类型 1234表示打包时字段封装的先后顺序
message Person {
    string name = 1;
    int32 age=2;
    repeated string email = 3; // repeated表示字段允许重复 => 类似于string[]
    repeated PhoneNumber phones = 4;
}


// enum关键字 定义一种枚举类型
enum PhoneType{
    MOBILE=0;
    HOME=1;
    WORK=2;
} 

// message也可以定义一种可以被其他消息嵌套的消息类型
message PhoneNumber{
    string number=1;
    PhoneType type = 2;
}

测试传输

  • 定义与protobuf对应的结构体
  • data, err := proto.Marshal(person 序列化编码得到结构体的二进制文件
  • err = proto.Unmarshal(data, person) 接收到的数据反序列化得到person结构体
    windows protoc,golang,golang,github,prototype
import (
	"fmt"
	"protobuf_test/pb"

	"google.golang.org/protobuf/proto"
)

func main() {
	person := &pb.Person{
		Name:  "Huzhen",
		Age:   27,
		Email: []string{"24122406@qq.com", "huzhen1145@163.com"},
		Phones: []*pb.PhoneNumber{
			&pb.PhoneNumber{
				Number: "18714859632",
				Type:   pb.PhoneType_MOBILE,
			},
			&pb.PhoneNumber{
				Number: "18714857878",
				Type:   pb.PhoneType_HOME,
			},
			&pb.PhoneNumber{
				Number: "18714854545",
				Type:   pb.PhoneType_WORK,
			},
		},
	}

	fmt.Println("person: ", person)
	// 编码: 将person对象进行序列化,得到二进制文件
	data, err := proto.Marshal(person)
	if err != nil {
		fmt.Println("encode err: ", err)
		return
	}

	fmt.Println("data: ", data)

	// 解码(反序列化)
	person2 := &pb.Person{}
	err = proto.Unmarshal(data, person2)
	if err != nil {
		fmt.Println("decode err: ", err)
		return
	}
	fmt.Println("person2: ", person2)
}

windows protoc,golang,golang,github,prototype文章来源地址https://www.toymoban.com/news/detail-784220.html

到了这里,关于windows下go安装并使用protobuf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(60)
  • Windows上安装和使用git到gitoschina和github上_亲测

    Windows上安装和使用git到gitoschina和github上_亲测 git介绍与在windows上安装 创建SSHkey 在gitoschina使用 【 git介绍与在windows上安装 】 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 相关介绍可以参考 百度百科 的说明, 或参考很好的廖雪峰资

    2024年02月15日
    浏览(43)
  • Go语言(Golang)安装下载配置及debug调试

    与Java类似,Go语言使用前也需要安装开发环境,并配置环境变量。下面以Windows平台为例,演示整体流程。 官方网站可能访问不到 https://golang.org/,可以访问国内镜像网站下载Go安装包: https://studygolang.com/dl https://mirrors.nju.edu.cn/ 因为Go语言一直的迭代,入门时尽量选择较新的版

    2024年02月04日
    浏览(63)
  • 【Golang中的Go Module使用】

    Golang中的Go Module是一个用于包管理和版本控制的工具。在本文中,我们将深入探讨Go Module的相关知识,包括其定义、使用方法以及一些常见的应用场景。 Go Module是Golang中的包管理和版本控制工具,它的发展历程、用法、意义以及相关指令都对于Golang开发者来说非常重要。在本

    2024年02月16日
    浏览(47)
  • 使用 Go (Golang) 使用 OpenCV 绘制对象 GoCV

    本文将向你展示如何使用 OpenCV 使用 Go 编程语言 (Golang) 和 GoCV 包绘制直线、正方形、圆形和椭圆形对象。 OpenCV 是一个主要用于实时计算机视觉的编程函数库。最初由 Intel 开发,然后由 Willow Garage 和 Itseez 提供支持。这个库是跨平台的,可以在开源 Apache 2 许可下免费使用。

    2024年02月07日
    浏览(55)
  • 【GoLang】哪些大公司正在使用Go语言

    前言: 随着计算机科学和软件开发的快速发展,编程语言的选择变得愈加关键。 在这个多元化的编程语境中,Go语言(简称Golang)以其简洁、高效、并发处理能力等特性逐渐受到业界关注。 越来越多的大型科技公司纷纷采用Go语言作为其软件开发的首选语言,这种趋势反映了

    2024年02月04日
    浏览(65)
  • [保姆教程] Windows平台下OpenCV编译安装和它的Go语言实现gocv的使用(亲测通过)

    一、下载安装 MinGW CMake 预备步骤 首先打开cmd: 下载安装MinGW64 访问: https://sourceforge.net/projects/mingw-w64/files/ 下载: MinGW-W64 GCC-8.1.0 下面的 x86_64-posix-seh 版本 下载后,将它解压缩到 c:mingw64 里 下载安装 CMake 访问:https://cmake.org/download/ 下载:Windows x64 ZIP 解压到: c:cmake Window

    2024年02月16日
    浏览(66)
  • 在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe

        grpc是google于2015年发布的一款跨进程、跨语言、开源的RPC(远程过程调用)技术。使用C/S模式,在客户端、服务端共享一个protobuf二进制数据。在点对点通信、微服务、跨语言通信等领域应用很广,下面介绍grpc在windows10上编译,这里以编译grpc v1.42.0版本为例,进行说明,如

    2024年02月10日
    浏览(29)
  • 【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

    在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。 在本文中,我们将探讨为什

    2024年02月15日
    浏览(80)
  • golang利用go mod巧妙替换使用本地项目的包

      拉了两个项目下来,其中一个项目依赖另一个项目,因为改动了被依赖的项目,想重新导入测试一下。   go.mod文件的require中想要被代替的包名在replace中进行一个替换,注意:用来替换的需要用绝对路径,一开始我用~/Documents/xboot/xboot/tools/reflect没有效果。   这样原

    2024年02月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包