本系统是猎豹移动基于go语言开发的一套消息推送系统,源码地址:https://github.com/Terry-Mao/goim 我要晨读
用go写了一个守护进程程序:用于检测redis的存活状态并将结果写到zookeeper中,部署到redis机器上,对于每个redis实例会有一个goroutine每隔固定时间去检测其状态,由主goroutine负责信号处理等,再接收到信号时kill其他的goroutine。程序运行了一段时间发现,有些redis实例的对应zookeeper的信息不更新,通过日志发现对应redis的goroutine挂掉了。阅读源码发现貌似是zk的第三方库抛出一个非预期的异常导致。 我要晨读
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被 导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。 我要晨读
反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 我要晨读
用logistic regression做ctr预估或则分类的同学,大家应该都知道梯度下降能够求得目标问题的最优解。但是梯度下降迭代太慢,而且不一定能求得最优解。 我要晨读
算法是程序的灵魂,而排序算法则是一种最基本的算法。排序算法有许多种,本文介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例。 我要晨读
Go1.1更新中最重要的特性之一就是由Dmitry Vyukov开发的全新的调度器。新的调度器能极大的提高Go并行程序的性能并且不需要对程序进行修改,因此我认为应该写一篇文章为大家介绍下新版的调度器特性。 我要晨读
《Go语言编程》一书介绍了libtask库,可以认为这个库等同于go的底层goroutine实现。 libtask库的channel的数据结构如下: 我要晨读
闭包是什么,闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。 闭包包含着外部的环境变量值,但这个环境变量值并不像匿名函数那样作为参数副本,而是实实在在在的引用,当外部变量变化时,闭包能使用的值自然也就变化了。 我要晨读
Go语言(服务器开发):客户端向服务器发送数据并接收返回数据 我要晨读
导读:这篇文章是Google首席工程师、Go语言之父Rob Pike自己整理的6月21日在旧金山给Go SF的演讲稿。Rob提到:Go语言本是以C为原型,以C++为目标设计,但最终却大相径庭。值得一提的是,这3门语言都曾当选TIOBE年度语言。 我要晨读
Go语言中,所有的I/O都是阻塞的,因此我们在写Go系统的时候要秉持一个思想:不要写阻塞的interface和代码,然后通过goroutines和channels来处理并发,而不是用回调和futures。其中一个例子是“net/http"包中的http服务器,无论何时当http服务器接收一个连接,它都会创建一个新的goroutine处理来自这个连接的所有请求,这样我们就能写出很清晰的代码:先做什么,然后做什么。然而,不幸的是,操作系统提供的阻塞式I/O并不适合构建我们自己的阻塞式I/O接口(interfa 我要晨读
Golang可以通过syscall包中的相关socket函数(Windows和Linux中syscall中网络编程的函数不太一样)来进行网络编 程,可以用我们熟悉的方法使用raw socket,因为最近在搞一些协议的学习,所以特意试了试,和普通的linux+C的 socket编程基本没什么区别。 我要晨读
如你所知,Go 语言的 slice 很强大且使用简单。通过 Go 语言的内置函数,它可以解决我们许多问题。 但是今天,我更多想讲述的是 slice 与它的内存。 我要晨读
在 2017 年的年中,我在 GopherCon 上发表了《Go 的函数式编程》的演讲。我提出了一些函数式编程的概念,Gophers 使用它,可以提高编程效率,代码更加简洁。 我要晨读
我们例子中的所有中间件都会接收一个 http.Handler 作为参数,并返回一个 http.Handler 。 这样便于将中间件链接起来。我们所有的中间件将会遵循如下基本模式: 我要晨读
让我们看看 Excel 或 Google 文档,他们是人类发明的最普遍的构成文件的应用程序。我们都使用过它们。 正如你可能知道的,这些应用程序有各种各样对文本的操作。 比如在文本中添加颜色、下划线、各种字体和大小,或者在表格中组织内容。这个列表很长,我们期望从这些工具中得到一个普遍的功能 —— “撤销”和“重做”已经执行了的操作的能力。 我要晨读
在golang标准库中,有那么一类包,它们用于处理go项目目录结构、源码、语法、基本操作等。一般程序中可能用不到这些包,但在go工具链源码中用到了,之所以学习这些标准库,是为了更好的看go工具链的源码。首先我们来看收集go包信息的库:go/build 我要晨读
我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。 我要晨读
weed-fs是一个简单且高性能的分布式存储系统, 它有两个目标: 1、存储海量文件 2、快速访问所存的文件 我要晨读