自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猛犸象

一只不知疲惫的猛犸

  • 博客(9)
  • 收藏
  • 关注

原创 golang设计模式 - 单例模式

单例golang中实现单例模式非常简单,那就是使用指针对象。根据对象的实例化时间,可以分为饿汉式和懒汉式。对象type Person struct { Name string Age int}并发测试func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { ins := GetInstance() fmt.Printf("%p\n", ins)

2020-09-30 11:46:24 627

原创 golang中的下划线(_)用法

golang的下划线有以下三种用法.1.忽略返回值这个应该是最简单的用途,比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写:v1, v2, _ := function(...)2.用在变量(特别是接口断言)例如我们定义了一个接口(interface):type Foo interface { Say()}然后定义了一个结构体(struct)type Dog struct {}然后我们希望在代码中判断Dog这个struct

2020-09-29 17:18:26 6971

原创 Golang 中的并发限制与超时控制

前言上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。以下示例代码全部可以直接在 The Go Playground 上运行测试:并发我们先来跑一个简单的并发看看package mainimport ( "fmt" "time")func run(task_id, sleeptime int, ch chan string) {

2020-09-29 10:15:20 1313

原创 使goroutine同步的方法总结

前言:在前面并发性能对比的文章中,我们可以看到Golang处理大并发的能力十分强劲,而且开发也特别方便,只需要用go关键字即可开启一个新的协程。但当多个goroutine同时进行处理的时候,就会遇到同时抢占一个资源的情况(并发都会遇到的问题),所以我们希望某个goroutine等待另一个goroutine处理完某一个步骤之后才能继续。sync包就是为了让goroutine同步而出现的。当然还可以使用channel实现,这个后面会介绍到。锁:锁有两种:互斥锁(mutex)和读写锁(RWMutex)互

2020-09-29 09:37:03 875

原创 关于gin-gonic中的中间件使用说明以及原理

今天在写一个网关拦截中间件的时候,发现一个关于 c.Next 的问题。事情是这样的,我的网关中间件校验IP发起请求的频率,过高了就拦截此次请求,并加入黑名单,所以当出发拦截的时候,我要终止程序继续向下传递。于是想到了 c.Next ,各种资料都说它是传递到下一个 handler 去处理,测试后发现不是这么回事,于是我把 c.Next 删掉了,发现并不影响事件往下传递,至此我才明白,这个 c.Next 的意思是下一个中间件在此处被调用,因为中间件是个洋葱模型,先进后出,你可以控制在哪个位置去载入下一个中间件

2020-09-24 11:24:59 980

原创 golang单元测试与基准测试

注意:在Golang中,对于单元测试程序来说通常会有一些重要约束,主要如下:1、单元测试文件名必须为xxx_test.go2、单元测试的函数名必须为TestXxx(大驼峰)3、单元测试函数参数必须为t *testing.T(测试框架强要求)4、基准测试也要放在xxx_test.go文件里面,以BenchmarkXxxx(大驼峰)为文件名,参数为 b *testing.Bxxx_test.go 文件可以放在任何地方,测试的时候进入该目录再运行。在实际使用中,避免不了要去测试一些功能,而它又牵涉到项

2020-09-24 11:09:23 1104

原创 理解golang中什么是nil

理解golang中什么是nil

2020-09-21 11:17:20 4845 1

原创 golang 服务器零停机热重启原理详解

关于TCP服务的实现过程首先需要了解tcp服务器,socker机制,这些和语言无关。一个简单的tcp server实现过程:创建socket资源,socker1 ,是一个打开的文件描述符。bind绑定到Hosu, Port。开始监听listen。经过以上过程,一个tcp服务就搭建好了。客户端发起tcp连接请求操作系统与其完成三次握手阶段,此连接就算建立了,操作系统根据tcp协议中的端口号标识将此连接放入指定的 backlog 队列中。tcp server 从 backlog 队列中 acc

2020-09-02 14:56:25 1097

原创 go build command-line-arguments: copying /tmp/go-build042781492/b001/exe/a.out: open main: text file

今天在 build 命令源码文件 main.go 的时候,报如错误:go build command-line-arguments: copying /tmp/go-build042781492/b001/exe/a.out: open main: text file busy意思很明显,build 完成之后将编译后的文件覆盖之前生成的可执行文件 main 的时候,发现main文件被占用了,并且没有释放,无法覆盖。因为我已经把 main 运行起来了,然后我修改了代码,重新 build 时出现的问题,

2020-09-01 17:02:57 2822 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除