自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

稻草人技术博客

Keep Calm and Carry On

  • 博客(10)
  • 论坛 (4)
  • 收藏
  • 关注

转载 Go context 超时控制

常见方法context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) // 指定时长超时结束context.WithCancel(parent Context) (ctx Context, cancel CancelFunc) // 手动结束context.WithDeadline(parent Context, d time.Time) (Context, CancelFunc) // 指定时间结束

2020-09-17 15:33:58 138

转载 Go 在orm中使用反射

作为静态语言,golang 稍显笨拙,还好 go 的标准包reflect(反射)包弥补了这点不足,它提供了一系列强大的 API,能够根据执行过程中对象的类型来改变程序控制流。本文将通过设计并实现一个简易的 mysql orm 来学习它,要求读者了解mysql基本知识,并且跟我一样至少已经接触 golang 两到三个月。orm 这个概念相信同学们都非常熟悉,尤其是写过rails的同学,对active_record的强大肯定深有体会(得益于的method_missing和define_method方法,少写了

2020-09-14 21:49:15 74

转载 Go 语言中Select与for结合使用break

func test(){ i := 0 for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5{ fmt.Println("break now") break } fmt.Println("i

2020-09-14 17:14:38 141

转载 Go并发模型:合理退出并发协程

目录说明master:使用stop通道,主动告知goroutine退出stop_channel:和master相同detect_close_channel: 示例可以使用for-range替代for-select,range能检测通道关闭,自动退出detect_close_channel_v2:在前一个基础上,增加了监控功能,必须使用for-select,使用ok方法检测通道关闭,退出协程goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这

2020-09-14 14:40:01 171

转载 Go并发模型:流水线模型

Go作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,Go并发模型有多种模式,通过流水线模型系列文章,你会更好的使用Go的并发特性,提高的程序性能。这篇文章主要介绍流水线模型的流水线概念,后面文章介绍流水线模型的FAN-IN和FAN-OUT,最后介绍下如何合理的关闭流水线的协程。Golang的并发核心思路Golang并发核心思路是关注数据流动。数据流动的过程交给channel,数据处理的每个环节都交给goroutine,把这些流程画起来,有始有终形成一条线,那就能构成流水线模型。但

2020-09-14 14:31:55 90

转载 全面认识高并发

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键

2020-09-14 12:04:26 118

转载 Go 依赖注入库dig

简介今天我们来介绍 Go 语言的一个依赖注入(DI)库——dig。dig 是 uber 开源的库。Java 依赖注入的库有很多,相信即使不是做 Java 开发的童鞋也听过大名鼎鼎的 Spring。相比庞大的 Spring,dig 很小巧,实现和使用都比较简洁。快速使用第三方库需要先安装,由于我们的示例中使用了前面介绍的go-ini和go-flags,这两个库也需要安装:$ go get go.uber.org/dig$ go get gopkg.in/ini.v1$ go get github.

2020-09-13 17:15:37 111

转载 Golang视角下的设计模式

这篇文章想聊聊Golang语言下的设计模式问题,我觉得这个话题还是比较有意思的。Golang没有像java那样对设计模式疯狂的迷恋,而是摆出了一份“看庭前花开花落,望天空云卷云舒”的姿态。单例模式:Gloang的单例模式该怎么写?随手写一个,不错,立马写出来了。但这个代码有什么问题呢?多个协程同时执行这段代码就会出现问题:instance可能会被赋值多次,这段代码是线程不安全的代码。那么如何保证在多线程下只执行一次呢?条件反射:加锁。。。加锁是可以解决问题。但不是最优的方案,因为如果有1W并发,每一个线

2020-09-09 21:19:49 55

转载 Elasticsearch理解

生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据非结构化数据结构化数据:也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、Word 文档,邮件,各类报表、图片和咅频、视频信息等。说明:如果要更细致

2020-09-07 22:58:54 79

转载 Go context详解

什么是 contextGo 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含 goroutine 的运行状态、环境、现场等信息。context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。随着 context 包的引入,标准库中很多接口因此加上了 context 参数,例如 database/sql 包。context 几乎成为了并发控制和超时控制的标准做法。context.Context

2020-09-04 19:45:29 449

空空如也

Shower稻草人的留言板

发表于 2020-01-02 最后回复 2020-01-02

我也吐个关于修改用户名的槽。。

发表于 2016-11-25 最后回复 2016-11-25

突然发现原来用富文本编辑器写的博文里的代码示例都没发看了。。。

发表于 2016-11-24 最后回复 2016-11-25

网站访问速度慢

发表于 2016-10-12 最后回复 2016-10-26

空空如也

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

TA关注的人 TA的粉丝

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