分类:
Go
前言
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。后台是谷歌属于出场自带BGM的语言!!!
下载Go安装包
打开如下连接
2. 点击下载win的安装包
3. 然后中国菜鸟式安装
4. 最后在控制台中检测一下
5. 安装相关插件
6. 按一下 Ctrl + Shift + P 快捷键然后安装下图操作
然后就安装好了
或者也可以下载GoLand
点击下载
3. 然后点击试用30天,到这个页面
3.然后创建项目选择本地相关Go的路径,进行创建
4.紧接着打开命令行创建相关 mod 文件
5. 执行相关命令,创建初始化文件!
go mod init github.com/AiDaSi/protobuf-go
6. 点击查看内容
7.为了避免一些智能提示的一些错误
8. 在 Terminal 中安装第三方库
go get -u github.com/golang/protobuf/protoc-gen-go
如果遇到这种问题请切换一下网络
这时我们可以看到该库已经引用了进来
编写Go语言代码
1. 创建 main.go 文件
然后把 go1 更改为 main
输入相关代码
package main import "fmt" func main () { fmt.Println("Hello world!") }
在 Terminal 中运行命令
go run main.go
编写proto文件与Go的配合
创建相关文件夹以及文件
安装相关 proto 插件
编辑 person.proto 文件
syntax = "proto3"; package example.first; message PersonMessage { int32 id =1; bool is_adult = 2; string name = 3; repeated int32 lucky_numbers = 4; }
创建转换 person.proto 文件为 go 语言
在 Terminal 中运行命令
protoc --proto_path src/ --go_out=src/ src/first/person.proto
修改 main.go 文件
package main import ( "fmt" example_first "github.com/AiDaSi/protobuf-go/src/first" ) func main () { fmt.Println("Hello world!") NewPersonMessage() } func NewPersonMessage() { pm := example_first.PersonMessage{ Id: 123, IsAdult: true, Name: "AiDaSi", LuckyNumbers: []int32{1,2,3,4,5}, } fmt.Println(pm) pm.Name = "Nick" fmt.Println(pm) fmt.Printf("The Id is: %d\n",pm.GetId()) }
运行一下
文件读取操作
package main import ( "fmt" firstpb "github.com/AiDaSi/protobuf-go/src/first" "github.com/golang/protobuf/proto" "io/ioutil" "log" ) func main () { fmt.Println("Hello world!") //写入 //pm := NewPersonMessage() //_=writeToFile("person.bin",pm) //取出 pm2 := &firstpb.PersonMessage{} _=readFromFile("person.bin",pm2) fmt.Println(pm2) } func readFromFile(filename string,pb proto.Message) error { dataBytes, err := ioutil.ReadFile(filename) if err != nil { log.Fatalln("读取文件时发生错误",err.Error()) } err = proto.Unmarshal(dataBytes,pb) return nil } func writeToFile(filename string,pb proto.Message) error { dataBytes, err := proto.Marshal(pb) if err != nil { log.Fatalln("无法序列化到bytes",err.Error()) } if err := ioutil.WriteFile(filename,dataBytes,0644); err != nil { log.Fatalln("无法写入到文件",err.Error()) } log.Println("成功写入到文件") return nil } func NewPersonMessage() *firstpb.PersonMessage { pm := firstpb.PersonMessage{ Id: 123, IsAdult: true, Name: "AiDaSi", LuckyNumbers: []int32{1,2,3,4,5}, } fmt.Println(pm) pm.Name = "Nick" fmt.Println(pm) fmt.Printf("The Id is: %d\n",pm.GetId()) return &pm }
运行结果:
转换 json
func toJson(pb proto.Message) string { marshaler := jsonpb.Marshaler{Indent:" "} str, err := marshaler.MarshalToString(pb) if err != nil { log.Fatalln("转化为Json时发生错误",err.Error()) } return str } //调用 //转化为Json pmStr := toJson(pm) fmt.Println(pmStr)
将 json 转换为对象
func fromJSON(in string,pb proto.Message) error { err := jsonpb.UnmarshalString(in,pb) if err != nil { log.Fatalln("读取Json时发生错误",err.Error()) } return nil } //调用 //读取json pm3 := &firstpb.PersonMessage{} _=fromJSON(pmStr,pm3) fmt.Println(pm3)
感谢各位的观看!!!
我们下期见!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术