tnblog
首页
视频
资源
登录

初识Go

6433人阅读 2020/3/24 15:28 总访问:3667807 评论:0 收藏:0 手机
分类: Go

前言

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. 执行相关命令,创建初始化文件!

  1. go mod init github.com/AiDaSi/protobuf-go


  6. 点击查看内容


  7.为了避免一些智能提示的一些错误


  8. 在 Terminal 中安装第三方库

  1. go get -u github.com/golang/protobuf/protoc-gen-go


如果遇到这种问题请切换一下网络


这时我们可以看到该库已经引用了进来



编写Go语言代码



  1. 创建 main.go 文件 


然后把 go1 更改为 main

输入相关代码

  1. package main
  2. import "fmt"
  3. func main () {
  4.    fmt.Println("Hello world!")
  5. }


Terminal 中运行命令

  1. go run main.go



编写proto文件与Go的配合



创建相关文件夹以及文件


安装相关 proto 插件




编辑 person.proto 文件

  1. syntax = "proto3";
  2. package example.first;
  3. message PersonMessage {
  4.     int32 id =1;
  5.     bool is_adult = 2;
  6.     string name = 3;
  7.     repeated int32 lucky_numbers = 4;
  8. }


创建转换 person.proto 文件为 go 语言

在 Terminal 中运行命令

  1. protoc --proto_path src/ --go_out=src/ src/first/person.proto


修改 main.go 文件

  1. package main
  2. import (
  3.    "fmt"
  4.    example_first "github.com/AiDaSi/protobuf-go/src/first"
  5. )
  6. func main () {
  7.    fmt.Println("Hello world!")
  8.    NewPersonMessage()
  9. }
  10. func NewPersonMessage()  {
  11.    pm := example_first.PersonMessage{
  12.       Id:                   123,
  13.       IsAdult:              true,
  14.       Name:                 "AiDaSi",
  15.       LuckyNumbers:         []int32{1,2,3,4,5},
  16.    }
  17.    fmt.Println(pm)
  18.    pm.Name = "Nick"
  19.    fmt.Println(pm)
  20.    fmt.Printf("The Id is: %d\n",pm.GetId())
  21. }


运行一下


文件读取操作

  1. package main
  2. import (
  3.    "fmt"
  4.    firstpb "github.com/AiDaSi/protobuf-go/src/first"
  5.    "github.com/golang/protobuf/proto"
  6.    "io/ioutil"
  7.    "log"
  8. )
  9. func main () {
  10.    fmt.Println("Hello world!")
  11.    //写入
  12.    //pm := NewPersonMessage()
  13.    //_=writeToFile("person.bin",pm)
  14.    //取出
  15.    pm2 := &firstpb.PersonMessage{}
  16.    _=readFromFile("person.bin",pm2)
  17.    fmt.Println(pm2)
  18. }
  19. func readFromFile(filename string,pb proto.Message) error  {
  20.    dataBytes, err := ioutil.ReadFile(filename)
  21.    if err != nil {
  22.        log.Fatalln("读取文件时发生错误",err.Error())
  23.    }
  24.    err = proto.Unmarshal(dataBytes,pb)
  25.    return nil
  26. }
  27. func writeToFile(filename string,pb proto.Message) error  {
  28.    dataBytes, err := proto.Marshal(pb)
  29.    if err != nil {
  30.       log.Fatalln("无法序列化到bytes",err.Error())
  31.    }
  32.    if err := ioutil.WriteFile(filename,dataBytes,0644); err != nil {
  33.       log.Fatalln("无法写入到文件",err.Error())
  34.    }
  35.    log.Println("成功写入到文件")
  36.    return nil
  37. }
  38. func NewPersonMessage() *firstpb.PersonMessage {
  39.    pm := firstpb.PersonMessage{
  40.       Id:                   123,
  41.       IsAdult:              true,
  42.       Name:                 "AiDaSi",
  43.       LuckyNumbers:         []int32{1,2,3,4,5},
  44.    }
  45.    fmt.Println(pm)
  46.    pm.Name = "Nick"
  47.    fmt.Println(pm)
  48.    fmt.Printf("The Id is: %d\n",pm.GetId())
  49.    return  &pm
  50. }


运行结果:


转换 json

  1. func toJson(pb proto.Message) string {
  2.    marshaler := jsonpb.Marshaler{Indent:"    "}
  3.    str, err := marshaler.MarshalToString(pb)
  4.    if err != nil {
  5.       log.Fatalln("转化为Json时发生错误",err.Error())
  6.    }
  7.    return str
  8. }
  9. //调用
  10. //转化为Json
  11. pmStr := toJson(pm)
  12. fmt.Println(pmStr)


将 json 转换为对象

  1. func  fromJSON(in string,pb proto.Message) error  {
  2.    err := jsonpb.UnmarshalString(in,pb)
  3.    if err != nil {
  4.       log.Fatalln("读取Json时发生错误",err.Error())
  5.    }
  6.    return  nil
  7. }
  8. //调用
  9. //读取json
  10. pm3 := &firstpb.PersonMessage{}
  11. _=fromJSON(pmStr,pm3)
  12. fmt.Println(pm3)


感谢各位的观看!!!

我们下期见!


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

思宇上课笔记—初识jQuery

JQuery(前端)什么是jQuery?jQuery就只是一个一个JavaScript函数库而已什么是js的库就是封装的一些js常用的的方法。eg:Dom...

初识shell 01

一、简介1、2、二、查看Linux系统默认用的什么shell三、shell的使用方式手工方式:手工敲击键盘,直接输入命令,按Enter后。...

MonGoDB 学习一(包含各种花样坑)

资源链接:链接:https://pan.baidu.com/s/1xgDnP2aHW1fNN9qLAP7OtQ提取码:4zm81,安装MongoDB (传统式的下一步)这里选Cu...

GodeFirst实现外键

GodeFirst实现外键有多种方法如下方法一:通过默认名称,导航属性名称+主表主键父母表生成的效果如下:方法二:通过Foreign...

ng : 无法加载文件 C:\Users\WSJ\AppData\Roaming\npm\ng.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/Go.microsoft.com /fwlink/?LinkID=135170 中的.

错误提示:解决方法:在win10搜索那里搜索Windos PowerShell然后选择管理员身份打开,ps:一定要选择 以管理员身份运行打开...

MonGodb HostPath PV与PVC示例

Mongodb HostPath PV与PVC示例[TOC] Persistent Volume 简介 可以做分布式存储的抽象层特点 可以对Pod进行解耦… ...

Go语言基础(一)

Go语言基础(一)[TOC] 基本程序演示 创建一个hello_word.go文件 package main //包,表明代码所在的模块(包) ...

Go语言基础(二)变量,常量以及与其他语言的差异

Go语言基础(二)变量,常量以及与其他语言的差异[TOC] 编写测试程序 注意事项 源码文件以_test结尾:xxx_test.go...

Go数据类型

Go 数据类型[TOC] 基本数据类型 bool string int int8 int16 int32 int64 uint uint8 ...

Go 运算符

Go 运算符[TOC] 算术运算符 当A为10,B为20时 运算符 描述 实例 + 相加 A + B 输出结果 30 - ...

Go 在Vscode中设置测试对象有输出

Go 在Vscode中设置测试有输出[TOC] 在使用Golang进行测试方法运行的时候,发现Log输出不了任何东西,原来是在运行测试的...

Go 条件与循环

Go 条件与循环[TOC] 循环 与其他主要编程语言的差异 Go 语言仅支持循环关键字 for。可以从以下代码看出,循环时并没...

Go 数组与切片

Go 数组与切片[TOC] 数组与其他语言的区别 在 Go 中简单的定义 var arr [3]int var arr1 = [3]int{1, 2, 3} 不...

Go Map声明、元素访问与遍历

Go Map声明、元素访问与遍历[TOC] Map的声明 Map的声明相当于其他语言的键值队,通常通过map[key_type]value_type的方式...

Go Map与工厂模式,在Go语言中实现Set

Go Map与工厂模式,在Go语言中实现Set[TOC] Map与工厂模式 Map 的 value 可以是一个方法与 Go 的 Dock type 接口方式一起...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术