分类:
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-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术
