GoMock框架使用指南

序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面三个测试框架: GoConvey GoStub GoMock 读者通过前面三篇文章的学习可以对框架GoConvey和GoStub优雅的组合使用了,本文将接着介绍第三个框架GoMock的使用方法,目的是使得读者掌握框架GoConvey + GoStub + GoMock组合使用的正确姿势,从而提高测试代码的质量。 GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface...阅读全文

简书 2017.06.24 23:40 _张晓龙_

源码阅读——十个C开源项目

代码阅读——十个C开源项目 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbench.html 2. CMockery cmockery是google发布的用于C单元...阅读全文

开源中国博客 2017-06-24 18:12:06 平凡之路

深度学习第二课:个性化推荐

大家好,我是来自 PaddlePaddle 开源社区的李钊(@livc),目前是一名大三学生。我曾经在手机百度实习,参与推荐算法和反作弊的研发工作,目前是 IDL 的一名实习生。很开心作为 Paddle Tutorials 系列的作者之一参加 GitChat 的分享。 在 Paddle 深度学习系列 Chat 的第一课中,官方开发组的张睿卿同学通过介绍一些深度学习的应用场景,带领大家了解深度学习的基本原理和工作方式,我们先来简单回顾下。 “人工智能”并不是一个很新的概念,它其实已经有 60 岁了...阅读全文

深度学习第一课

近几年深度学习的概念非常火,我们很幸运赶上并见证了这一波大潮的兴起。记得2012年之前提及深度学习,大部分人并不熟悉,而之后一段时间里,也有些人仍旧持怀疑的态度,觉得这一波浪潮或许与之前sparse coding类似,或许能持续火个两三年,但终究要被某个新技术新方法所取代,再后来,无论是学术界还是工业界,总有些研究者为自己没有在第一时间跟进这波浪潮感到后悔莫及。确实,从2012年AlexNet取得ImageNet的冠军开始,五年过去了,深度学习的方法仍旧占领着人工智能这片领域。 随着这波浪潮,有...阅读全文

GitChat 2017-06-24 17:52:07 PaddlePaddle开源团 等

饿了么 Influxdb 实践之路

前言 Influxdb是一个基于golang编写,没有额外依赖的开源时序数据库,用于记录metrics、events,进行数据分析。这篇文章谈论的influxdb版本在1.2.0以上。这篇文章只谈论influxdb在监控中的数据存储应用,不会谈论influxdb提供的整套监控方案。本文主要谈论五个方面:时序数据库选型、influxdb基本概念、存储引擎、实践、数据聚合。 选型 Influxdb vs Prometheus influxdb集成已有的概念,比如查询语法类似sql,引擎从LSM优化而...阅读全文

区块链的商业应用:超级账本(Hyperledger)

背景 超级账本(Hyperledger)是linux基金会下的众多项目中的一个。是由IBM、因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目,超级账本还包括4个框架项目:Sawtooth、Iroha、Fabric、Burrow。其中广为人知的是Fabric。当前成员大约140个,其中1/4来自中国,现在中国技术组由万达、华为、IBM担任主要负责,负责中国会员和中国需求的提供,以及推进代码。 超级账本是什么? 正如Hyperledger官方网站上的描述,这一项目的目标是...阅读全文

简书 2017.06.22 22:14* 乔延宏

今日头条Go建千亿级微服务的实践

今日头条使用 Go 语言构建了大规模的微服务架构,本文结合 Go 语言特性着重讲解了并发,超时控制,性能等在构建微服务中的实践 编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者项超;36氪经授权发布。 今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。 Go 构建微服务的历程 在2015年之前,头条的主要编程语言是 Python 以及部分 C++...阅读全文

开源中国博客 2017-06-23 18:03:21 强子哥哥

也谈goroutine调度器

Go语言在2016年再次拿下TIBOE年度编程语言称号,这充分证明了Go语言这几年在全世界范围内的受欢迎程度。如果要对世界范围内的gopher发起一次“你究竟喜欢Go的哪一点”的调查,我相信很多Gopher会提到:goroutine。 Goroutine是Go语言原生支持并发的具体实现,你的Go代码都无一例外地跑在goroutine中。你可以启动许多甚至成千上万的goroutine,Go的runtime负责对goroutine进行管理。所谓的管理就是“调度”,粗糙地说调度就是决定何时哪个goro...阅读全文

Tony Bai 六月 23, 2017 bigwhite

Golang中goroutine的调度器详解

Go调度器原理浅析来源:https://www.douban.com/note/300631999/ goroutine是golang的一大特色,或者可以说是最大的特色吧(据我了解),这篇文章主要翻译自Morsing的[这篇博客](http://morsmachine.dk/go-scheduler),我读这篇文章的时候不只是赞叹调度器设计的精巧,而且被Unix内核设计思想的影响和辐射所震撼,感觉好多好东西都带着它的影子。绪论(Introduction)---------------------...阅读全文

CSDN博客 2016-04-18 11:36 heiyeshuwu

说说Golang的runtime

runtime包含Go运行时的系统交互的操作,例如控制goruntine的功能。还有debug,pprof进行排查问题和运行时性能分析,tracer来抓取异常事件信息,如 goroutine的创建,加锁解锁状态,系统调用进入推出和锁定还有GC相关的事件,堆栈大小的改变以及进程的退出和开始事件等等;race进行竞态关系检查以及CGO的实现。总的来说运行时是调度器和GC,也是本文主要内容。 <img src="https://pic3.zhimg.com/v2-130f1cfa2eb6ab87c1...阅读全文

知乎专栏 2017-06-09 20:17:06 好奇还思猫

我们说Golang牛逼都在说些什么?

先说好,我并不认为go是世界上最好的语言!但是我觉得至今用着最爽觉得最牛逼的编译型语言(逃。。。) 那么说它牛逼,我们都在说些什么呢? 首先,说它牛逼并不是说已经达到了至今各方面最好甚至达到无可超越的境界,说实话我不认为任何一门语言真的达到这种程度。你要真的非要分出个高低,谷歌曾发布了一个 研究报告 ( http://link.zhihu.com/?target=https%3A//days2011.scala-lang.org/sites/days2011/files/ws3-1-Hund...阅读全文

知乎专栏 2017-06-08 11:24:05 好奇还思猫

进程、线程、协程与goruntine

相信作为服务端开发尤其是高性能服务开发的猿们,曾经面试都曾经被问到进程,线程之类的问题,作为操作系统最核心的概念,这些X程就像我们的一个个工具,是我们在开发过程中经常接触的概念,对于这些概念的不清晰我们便发现写的代码功能是对的,代码是渣的,将直接体现在我们代码的低效率,高bug率并附带问题出现都不知到问题出在哪里,作为新时代的猿我们原不需要那么多时间去解bug,我们需要更多时间陪女票,不是吗? 不过协程一般不会被问到,但在golang开发的过程中相信大家最经常接触的就是go协程,但对于什么...阅读全文

知乎专栏 2017-06-05 好奇还思猫

一个内部API系统的性能优化

这个API系统的本身目的是解决大量并发关系数据库查询的问题,主体设计思路是对PG中的表数据通过LRU等缓存算法缓存其中的数据,并进行请求合并也就是请求削峰服务,从而大量减少直连数据库操作,减轻数据库的压力,查询效率也大大提高。由于这个项目第一版各种指标要求不是很高,接着就面临一系列严重的问题:包括无法承载百万终端级别的数据;请求压力过大请求失败;内存和CPU在请求高峰时打满;出现goruntine崩溃和map读写冲突问题;性能和预期差的很远。独自接下优化这个项目后不得不一点dian回归重构,期间...阅读全文

知乎专栏 2017-06-02 好奇还思猫

用gomock进行mock测试

在开发过程中往往需要配合单元测试,但是很多时候,单元测试需要依赖一些比较复杂的准备工作,比如需要依赖数据库环境,需要依赖网络环境,单元测试就变成了一件非常麻烦的事情。举例来说,比如我们需要请求一个网页,并将请求回来的数据进行处理。在刚开始的时候,我通常都会先启动一个简单的http服务,然后再运行我的单元测试。可是这个单元测试测起来似乎非常笨重。甚至在持续集成过程中,我还为了能够自动化测试,特意写了一个脚本自动启动相应的服务。事情似乎需要进行一些改变。 mock对象就是为了解决上面的问题而诞生的,...阅读全文

Segmentfault 2017-06-23 01:05:35 terasum

golang中方法的receiver为指针和不为指针的区别

前言 最近看网站有同学提问golang中方法的receiver为指针和不为指针有什么区别,在这里我以简单易懂的方法进行说明,帮助刚刚学习golang的同学. 方法是什么 其实只要明白这个原理,基本就能理解上面提到的问题. 方法其实就是一种特殊的函数,receiver就是隐式传入的第一实参. 举个例子 type test struct{ name string } func (t test) TestValue() { } func (t *test) TestPointer() { } func...阅读全文

Segmentfault 2017-06-22 23:06:05 pinecone

Go使用用两种方式打印自然数

这道题可以作为笔试题,现在给定下面一个条件 go func() { for i := 1; i < 10; i++ { println(2*i - 1) } }() go func() { for i := 1; i < 10; i++ { println(2 * i) } }() 让你使用多种方式将奇偶合并,并打印自然数,这道题目很简单,思考几秒钟,看看你的实现。。。。。。 好了我的实现比较...阅读全文

Golang 中使用 JSON 的小技巧

有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章了。 参考文章:http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/ 临时忽略struct字段 type User struct { Email string `json:"email"` Password string `json:"pa...阅读全文

开源中国博客 2017-06-22 17:04:00 徐学良