golang
文章平均质量分 50
帅那个帅
虽然过去不能改变,未来可以
展开
-
Google为什么要开发 Go 这门新语言
go这门语言的创建历史原创 2022-04-25 16:48:00 · 607 阅读 · 0 评论 -
常用的分布式事务解决方案有哪些?
分布式事务,数据一致性原创 2022-04-24 09:57:52 · 352 阅读 · 0 评论 -
RPC核心概念理解
rpc原创 2022-04-23 16:12:34 · 2613 阅读 · 1 评论 -
Makefile文件是什么?
mak makefile原创 2022-04-22 18:19:36 · 1075 阅读 · 0 评论 -
面试官:简单聊聊 Go 逃逸分析?
golang 逃逸分析原创 2022-04-21 17:38:15 · 539 阅读 · 0 评论 -
五分钟带你了解啥是JWT
1. JSON Web Token是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。2. 什么时候你应该用JSON Web Token下列场景中使用JSON Web Token是很有用的:2.1: Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资原创 2022-04-20 17:38:31 · 155 阅读 · 0 评论 -
redis 缓存穿透,缓存击穿,缓存雪崩
缓存穿透,缓存击穿,缓存雪崩原创 2022-04-19 16:06:37 · 11461 阅读 · 0 评论 -
Golang 的 “omitempty” 关键字略解
golang omitempty原创 2022-04-18 21:27:30 · 489 阅读 · 0 评论 -
golang 第三方包的选择方式
当开发一个项目的某一个功能的时候,需要使用到当三方的package,在GitHub上面找的时候相同功能的package有很多个,这个时候以什么方式来帮助我们选择使用那个包呢?star 数越多越好issue 数越低越好项目维护活跃,最后更新日期越接近越好有清楚的版本区分(查看项目的 Releases 标签)...原创 2021-02-03 21:35:34 · 211 阅读 · 0 评论 -
Go Modules 日常使用
1.初始化go mod init2. Go Proxy因国内访问外网受限,一般我们都会配合 Go Proxy 使用,以防止使用 go get 获取源码包时花费时间过长或无法下载:go env -w GOPROXY=https://goproxy.cn3.go.mod每一次的 go get 都会同时修改 go.mod 和 go.sum 文件。这两个文件是下载依赖包的主要依据。go.mod 类似于 PHP 中的 composer.json ,而 go.sum 则是 composer.lock。原创 2021-02-02 11:17:27 · 101 阅读 · 0 评论 -
golang 导入包的下划线和点的区别
在golang进行导入包时,我们有时会遇到包的前面需要加下划线或者点,一直不明白是什么意思,随即进行了搜索:包前是下划线_:当导入一个包时,该包下的文件里所有init函数都会被执行,但是有时我们仅仅需要使用init函数而已并不希望把整个包导入(不使用包里的其他函数)包前是点.:import(.“fmt”)这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”)可以省略的写成Println(“hello wo原创 2021-02-01 22:11:21 · 353 阅读 · 0 评论 -
Go和PHP之间的主要区别
Go基本上是一种可用于快速机器代码编译的编程语言,而PHP基本上是服务器端脚本,也是一种用于Web开发的通用编程语言。Go是一种静态类型的语言,而PHP是一种动态类型的语言PHP将核心PHP语言用于模板目的,因此浏览器通过发送的HTML代码处理PHP代码,并将输出发送到浏览器,而对于GO,通常使用简单的模板系统。Go语言得到了社区的广泛支持,并且由于它也得到了Google的支持,因此其社区支持比PHP有所增加。PHP是动态类型的,而Go为采用类似于动态语言的模式的环境提供了支持。Go具有在PHP.原创 2021-01-31 20:37:36 · 2555 阅读 · 0 评论 -
Rpc和Http的区别
一.远程调用方式无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种:RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型RPC的框架:webservie(c原创 2021-01-30 21:39:03 · 804 阅读 · 0 评论 -
怎么用go代码使用protoc编译器编译proto文件生成的pb.go文件
package mainimport ( "fmt" "ProtocDemo/example" "github.com/golang/protobuf/proto" "os")func main() { fmt.Println("Hello World. \n") msg_test := &example.Person{ Name: proto.String("Davie"), Age: proto.Int(18), From: proto.String("Chi原创 2021-01-29 21:48:29 · 590 阅读 · 0 评论 -
热加载调试 Hot Reload
Python 的 Flask框架,有 debug 模式,启动时传入 debug=True 就可以热加载(Hot Reload, Live Reload)了。即更改源码,保存后,自动触发更新,浏览器上刷新即可。免去了杀进程、重新启动之苦。Gin 原生不支持,但有很多额外的库可以支持。例如github.com/codegangsta/gingithub.com/pilu/fresh这次,我们采用 github.com/pilu/fresh 。go get -v -u github.com/pilu/原创 2021-01-28 22:08:49 · 644 阅读 · 0 评论 -
Golang timer定时器
timer 计时器用于在指定的Duration类型时间后调用函数或计算表达式。如果只是想指定时间之后执行,使用time.Sleep()使用NewTimer(),可以返回的Timer类型在计时器到期之前,取消该计时器直到使用<-timer.C发送一个值,该计时器才会过期定义计数器timer := time.NewTimer(time.Second * 2)停止定时器timer.Stop()强制的修改timer中规定的时间timer.Reset(0) ticker 周期性的ti原创 2021-01-27 22:03:04 · 530 阅读 · 0 评论 -
slice的用法以及和数组的区别
slice是go的一个语言特性,其实有点类似于cpp的vector,可变长度,可以扩展空间。今天详细看了下,做下总结。slice本质上是一个区间,原型是[]T,大致的实现是这样的:type slice struct { first *T len int cap int}可以看到的是是一个指向数组的指针,那么在修改slice的时候会改变数组的值。和数组的用法差别不是太大。基于数组的创建:var myArrary [3]int = [3]int{1,2,3}var原创 2021-01-26 21:19:03 · 1074 阅读 · 0 评论 -
goroutine
原始版本:func add(a int) int { //假设处理业务逻辑需要100ms time.Sleep(time.Millisecond * 100) return a}func main() { sum := 0 start := time.Now().UnixNano() / 1e6 for i := 0; i < 100; i++ { sum += add(i) } end := time.Now().UnixNano() / 1e6 fmt.Printf("原创 2021-01-25 22:29:44 · 58 阅读 · 0 评论 -
go递归循环遍历文件夹
/**dirname 目录名称level 层级关系 */func listFiles(dirName string,level int) { //level用来记录当前递归的层次,生成带有层次感的空格 s :="|--" for i:=0;i<level;i++ { s = "| "+s } fileInfos,err := ioutil.ReadDir(dirName) if err != nil { log.Fatal(err) } for _,fi := ran原创 2021-01-24 12:09:12 · 410 阅读 · 0 评论 -
go复制文件的三种方式
方法一:io包下的Read()和Write()方法实现我们可以通过io包下的Read()和Write()方法,边读边写,就能够实现文件的复制。这个方法是按块读取文件,块的大小也会影响到程序的性能该函数的功能:实现文件的拷贝,返回值是拷贝的总数量(字节),错误func copyFile1(srcFile,destFile string)(int,error){ file1,err:=os.Open(srcFile) if err != nil{ return 0,err } file2,er原创 2021-01-23 19:04:34 · 635 阅读 · 0 评论 -
time包的使用
package mainimport ( "fmt" "math/rand" "time")func main() { //1.获取当前时间 t1 := time.Now()//time.Time//结构体类型 fmt.Printf("%T\n",t1)// fmt.Println(t1) //2.获取指定时间 //调用的只是time包下的函数Date(),返回一个结构体对象 t2 := time.Date(2009,7,15,16,30,28,0,time.Local)//原创 2021-01-22 15:56:24 · 135 阅读 · 0 评论 -
go Panic & Recover
PanicGo 的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运行时错误会引起painc异常。一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。通常,我们不需要再次运行程序去定位问题,日志信息已经提供了足够的诊断依据。因此,在我们填写问题报告时,一般会将panic异常和日志信息一并记录。由于pan原创 2021-01-21 18:23:17 · 145 阅读 · 0 评论 -
使用golang errors包自定义错误
发现Golang很多开源的package都是使用Error来定义错误,其实我自己更加的习惯利用返回的值进行判断。 虽然这么说,但Golang的error定义还是有意思的,合理就返回nil,不合理就返回Error的错误下面说说Golang的自定义错误的用法。在go里定义错误的方式有这么两种,但都需要你的返回值是error类型的1. 第一种方式是使用golang标准库包errors 来定义错误。使用方法很是简单,只需要 return errors.New(“string”) 。 这样就是一个最简单的错误返原创 2021-01-20 17:20:02 · 394 阅读 · 0 评论 -
go中make和new的区别
make和new都是golang用来分配内存的內建函数,且在堆上分配内存,make 即分配内存,也初始化内存。new只是将内存清零,并没有初始化内存。make返回的还是引用类型本身;而new返回的是指向类型的指针。make只能用来分配及初始化类型为slice,map,channel的数据;new可以分配任意类型的数据...原创 2021-01-19 20:35:20 · 351 阅读 · 0 评论 -
float32和float64的本质区别
首先我们需要知道何为bits和bytes?1. bits:名为位数2. bytes:为字节3. 简单的数就是MB和G的关系!那么8bits=1bytes,下面是各个单位的相互转化!那么float32和float64有什么区别呢?1. 数位的区别2. 一个在内存中占分别32和64个bits,也就是4bytes或8bytes3. 数位越高浮点数的精度越高它会影响深度学习计算效率?float64占用的内存是float32的两倍,是float16的4倍;比如对于CIFAR10数据集,如果采用fl原创 2021-01-18 19:27:36 · 6583 阅读 · 0 评论 -
Int8,Int16,Int32,Int64 有啥不同呢?看了立马就懂!
大家有没有写了很久代码,还不知道这个Int8,Int16, Int32, Int64有什么区别呢?或者是为什么后面的数字不一样呢?初步了解了一下,才清楚这个东西。先来扫盲一下计算机存储单元,在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。各种存储设备存储容量单位有KB、MB、GB和TB等几种计算机的基本的存储单元有:位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位。字节(Byt原创 2021-01-18 19:23:59 · 1823 阅读 · 0 评论 -
回调函数和闭包
回调函数和闭包当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions):函数可以作为另一个函数的参数(典型用法是回调函数)函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包)一般来说,附带的还具备一个特性:函数可以作为一个值赋值给变量。f := func(){...}f()由于Go中函数不能嵌套命名函数,所以函数返回函数的时候,只能返回匿名函数。先简单介绍下高阶函数,然后介绍闭包。高阶函数示例例如,将函数作为另一个函数的原创 2021-01-17 17:24:22 · 454 阅读 · 0 评论 -
字符串和编码
字符编码我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。由于计算机是美国人发明的,因此,最早只有127个字符被原创 2021-01-17 13:42:50 · 90 阅读 · 0 评论 -
go变量类型划分
一.按照数据类型划分1. 基本类型:int(整形),float(浮点),string(字符串),bool(布尔类型)2. 复合类型:array(数组),slice(切片),map,struct(结构体),pointer(指针),function(函数),chan(通道)二.按照特点来划分1. 值类型:int float string bool array 传递的是数据副本2. 引用类型:slice map chan 传递的是地址,多个变量指向了同一块内存地址...原创 2021-01-16 15:29:59 · 106 阅读 · 0 评论 -
go指针代码理解
package mainimport "fmt"func main() { p1 := Person{"王二狗",30, "男", "北京市"} fmt.Printf("%p,%T\n",&p1,p1) //0xc00006a040(结构体变量的内存地址) main.Person(结构体变量的类型) fmt.Println(p1) //{王二狗 30 男 北京市}(结构体变量的值) fmt.Println("#######") //pp2 := new(Person) va原创 2021-01-15 11:22:31 · 63 阅读 · 0 评论 -
Go中的fmt几种输出的区别和格式化方式
在日常使用fmt包的过程中,各种眼花缭乱的print是否让你莫名的不知所措呢,更让你茫然的是各种格式化的占位符。。简直就是噩梦。今天就让我们来征服格式化输出,做一个会输出的Goer。fmt.Print有几个变种:Print: 输出到控制台,不接受任何格式化操作Println: 输出到控制台并换行Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出别的类型)Sprintf:格式化并返回一个字符串而不带任何输出Fprintf:来格式化并输出到 io.Writ原创 2021-01-15 11:20:21 · 438 阅读 · 0 评论 -
从go语言中找&和*区别
*和&的区别 :& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 .从代码中验证 :先构建一个Rect类型 :1. &是取地址符号, 取到Rect类型对象的地址*2. 可以表示一个变量是指针类型(r是一个指针变量):*3.也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值4.查看这个指针变量的地址 , 基原创 2021-01-13 22:14:47 · 188 阅读 · 0 评论 -
golang中的三个点 ‘...‘ 的用法
‘…’ 其实是go的一种语法糖。它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。第二个用法是slice可以被打散进行传递。下面直接上例子:func test1(args ...string) { //可以接受任意个string参数 for _, v:= range args{ fmt.Println(v) }}func main(){var strss= []string{ "qwr", "234原创 2021-01-13 22:00:48 · 482 阅读 · 0 评论 -
Golang使用感受
之前一段时间,我曾经做过一些有关Golang的介绍。最近从使用Golang的过程中,又有一些新的感受,与大家分享一下。我比较反对语言之间的比较,一门编程语言能做什么,取决于用户用它做了什么,而一门语言擅长于做什么,取决于用户经常用它做什么,它的语法在解决哪个领域的问题比较有优势。我只是单纯站在一门语言的角度,来谈谈自己对它的客观看法。Golang能做什么?目前我使用Golang做过Web应用,树莓派上的应用,Linux和Windows系统下的应用。总结起来,Golang可以开发主流操作系统下的应用。嵌入式原创 2021-01-12 16:06:02 · 147 阅读 · 0 评论 -
golang 格式“占位符”%d,%f,%s等应用类型
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。红色部分为常用占位符对于 %g/%G 而言,精度为所有数字的总数,例如:123.45,%.4g 会打印123.5,(而 %6.2f 会打印123.45)。%e 和 %f 的默认精度为6对大多数的数值类型而言,宽度为输出的最小字符数,如果必要的话会为已格式化的形式填充空格。而以字符串类型,精度为输出的最大字符数,如果必要的话会直接截断。...原创 2021-01-12 15:52:39 · 2346 阅读 · 0 评论 -
Golang从入门到精通(一):Golang介绍
介绍Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。2012年,Go语言的创造者们发布了它的1.0版本。Go语言的创造者们包括Unix操作系统和B语言(C语言的前身)的创造者、UTF-8编码的发明者Ken Thompson,Unix项目的参与者、UTF-8编码的联合创原创 2021-01-12 15:46:05 · 1889 阅读 · 0 评论