![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
文章平均质量分 75
keep-study
学海无涯不坐舟
展开
-
protocol-buffer安装和使用
protocol buffer是Google发布的一种独立的数据交换格式,类似于json,用于数据的序列化和解析。不同点是不能直接在各编程语言中使用,需要先在一个proto文件中定义需要传输的数据格式,然后使用proto工具把proto文件编译成想要的语言,如java、go、php等。然后在代码中,使用语言对应的protocol buffer包调用proto工具生成的文件,完成数据的序列化。原创 2022-08-25 11:01:17 · 1630 阅读 · 0 评论 -
golang常用包
但是当需要解密的数据是接口类型时,由于接口的特殊性,实现了接口中方法的变量可以作为值代替该方法,这导致gob不知道接口中数据的具体类型,会解密失败,如下。不同的是,在反序列化时,需要有一个指定格式的变量接收值。解析切片中的某个数字,要知道该数字在切片中占用的起始位置,若位置不对则无法解析出正确的数字,返回0。切片中可以插入字符串,转换为数字时,只要能够从正确的位置开始解析,就会解析出正确的数字。所谓大端和小端节序,是指不同cpu再把数据流转换为字节时,排位位置的不同,如下。原创 2022-08-23 17:00:18 · 711 阅读 · 0 评论 -
golang RPC包的使用和源码学习(下):tinyrpc项目源码学习
项目是github上的一个开源项目,自定义了一个基于protocol-buffer的编码器。除此之外还自定义了数据的压缩方式(提高传输速度),自定义了请求头内容(提高了安全性),关于项目的讲解可查看原作者知乎文章。下载项目后,项目根目录下的client.go和server.go文件是建立客户端和服务端时,分别需要用到的两个文件,我们先查看client.go。查看创建客户端编码器的文件,codec/client.go。本篇公章主要主要从代码阅读角度出发,学习go的编程思想。原创 2022-08-22 18:01:58 · 639 阅读 · 0 评论 -
golang RPC包的使用和源码学习(上):基本原理和简单使用
本篇文章旨在通过学习rpc包和github上的一个rpc小项目,熟悉和学习golang中各个包的使用。原创 2022-08-16 17:49:54 · 430 阅读 · 0 评论 -
golang基础配置和常用命令
go bulid每次执行都要重新编译所有包文件,而go install则会先检查包对应的.a文件,如果包文件未修改,则直接使用.a文件,不需要重新编译,提高了速度。golang在1.11开始才支持mod,在此之前,go使用go get 命令下载依赖包,和项目代码都必须在gopath/src目录下。如果项目很大,每次编译都要花很长时间,则建议使用 go install 来编译,充分利用它对依赖包的缓存功能。文件中引入了gin框架包,我们可以先使用 go get命令先现在依赖,再执行main.go文件。....原创 2022-08-03 17:34:27 · 358 阅读 · 0 评论 -
go中反射的基本使用
文章目录对接口类型变量取值自定义CallUserFuncArray方法对接口类型变量取值m := make(map[string]interface{})m["session_id"] = "ssffsdfdfs"m["people"] = map[string]interface{}{"name":"zhangsan","age":18}fmt.Print(m["peolpe"]["name"])上面代码打印时会报错,这是因为people对应的是接口类型的值,不能使用map取值的方式取值需原创 2022-05-25 11:59:29 · 448 阅读 · 0 评论 -
go中指针相关操作记录
当我们使用一些方法时,需要传入变量的指针。go中对于指针的操作有相当明确的规定,不是任何变量和值都可以操作指针的可寻址情况一个变量: &x指针引用(pointer indirection): &*xslice 索引操作(不管 slice 是否可寻址): &s[1]因为 slice 底层实现了一个数组,它是可以寻址的可寻址 struct 的字段: &point.X可寻址数组的索引操作: &a[0]composite literal 类型: &s原创 2022-05-19 15:41:26 · 493 阅读 · 0 评论 -
go常用方法使用记录
文章目录1、生成指定长度随机字符串2、生成多级目录3、生成新文件,并写入数据4、向文件中追加数据5、map声明和初始化的3种形式6、map的json操作7、接口类型值的使用1、生成指定长度随机字符串//首先定义一个指定长度的 字节类型的切片b := make([]byte,32)//然后使用随机数填充切片if _,err := io.ReadFull(rand.Reader,b);err != nil{ fmt.Printl("生成异常:"+err)}//把切片转换为字符串var str原创 2022-05-13 17:29:04 · 170 阅读 · 0 评论 -
GO切片避坑记录
首先我们记录下切片的几种声明方式//声明一个当前长度、容量都为0的切片var slice []intslice := make([]int,0,0)slice := []int{}//通过数组声明切片arr := [5]int{1,2,3,4,5}slice := arr[:3]var slice []int = arr[:3]1、append不会自动追加append不像类似PHP的array_push函数,会直接改变原数组的值。append需要使用原切片的变量接收该方法的值,原切片原创 2022-04-21 18:19:26 · 301 阅读 · 0 评论