尘叶心繁

初识Go

电脑版发表于:2020/3/24 15:28

前言

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。后台是谷歌属于出场自带BGM的语言!!!


下载Go安装包


  1. 打开如下连接

https://studygolang.com/dl


  2. 点击下载win的安装包


  3. 然后中国菜鸟式安装

  4. 最后在控制台中检测一下

  

  5. 安装相关插件


  6. 按一下  Ctrl + Shift + P  快捷键然后安装下图操作


然后就安装好了



或者也可以下载GoLand



  1. 打开连接:https://www.jetbrains.com/go/

  2. 点击下载


  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)


感谢各位的观看!!!

我们下期见!

关于TNBLOG
TNBLOG,技术分享
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢