
前言
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
评价
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术