标签 - golang

docker golang    2019-02-19 14:33:57    289    0    0
# 第一章 容器与开发语言 Docker是一个开源工具,它可以将你的应用打包成一个标准格式的镜像,并且以容器的方式运行。Docker容器将一系列软件包装在**一个完整的文件系统**中,这个文件系统包含应用程序运行所需要的一切:代码、运行时工具、系统工具、系统依赖,几乎有任何可以安装在服务器上的东西。这些策略保证了**容器内应用程序运行环境的稳定性,不会被容器外的系统环境所影响**。 + *
golang    2016-06-23 15:24:12    6430    0    0
daemon的概念 守护进程(daemon)就是一直在后台运行的进程,它没有控制终端,无法和前台的用户交互。当我们打开一个终端时会创建一个session会话(shell),从用户登录开始到用户退出为止,这段时间内在该终端执行的进程都属于这一个会话。一个会话一般包含一个前台进程组、一个后台进程组和一个会话首进程(shell程序本身)。 例如用以下命令启动5个进程: $ proc1 | proc2 & $ proc3 | proc4 | proc5 proc1和proc2属于同一个后台进程组,proc3、proc4、proc5属于同一个前台进程组,Sh
golang    2016-04-28 10:42:54    3793    1    0
文章主要是参考雨痕学堂(微信订阅号)及其他网友的博客然后根据自己的理解整理而成。 string与[]byte相互转换 在写程序的过程中经常遇到string与[]byte的相互转换,但是这种转换是有代价的,string与[]byte并不共享底层内存空间,所以每次转换都伴随着内存的分配与底层字节的拷贝。 我们可以借助unsafe完成指针类型转换,避开内存分配与复制,从而提升性能。属于黑魔法,尽量不要用。 /* struct string{ uint8 *str; int len; } struct []uint8{ uint8 *array;
golang    2016-01-13 17:02:37    1334    0    0
golang错误处理方式一直是很多人诟病的地方,很多人都吐槽说一半的代码是 if err != nil { /* 错误处理 */ },严重影响正常的处理逻辑,我最开启也反感这种错误处理机制,每调用完一个函数都需要check一下,自定义函数也都要增加一个error类型的返回值,但是查了很多资料慢慢理解这种错误机制的好处。因为调用每一个函数都可能发生错误,及时在错误发生的地方做处理更容易构建复杂的大型系统。 异常与错误 错误与异常是很容易混淆的地方,错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题,这
golang    2015-11-28 16:15:37    4302    1    4
NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。 NSQ 由 3 个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程。 nsqlookupd 是管理的拓扑信息,维护着所有nsqd的状态,并提供了最终一致发现服务的守护进程。 nsqadmin 是一个 Web UI 来实时监控集群和执行各种管理任务。 这篇文章介绍主要介绍nsqd的实现。 T
golang    2015-10-29 21:16:25    6233    0    5
channel的用法 channel是golang中很重要的概念,配合goroutine是golang能够方便实现并发编程的关键。channel其实就是传统语言的阻塞消息队列,可以用来做不同goroutine之间的消息传递,由于goroutine是轻量级的线程能够在语言层面调度,所以channel在golang中也常被用来同步goroutine。 一般channel的声明形式为:var chanName chan ElementType ElementType指定这个channel所能传递的元素类型。 定义一个channel也很简单,直接使用内置的函数make()即可: ch :
golang    2015-10-29 04:36:02    1270    0    1
go语言中处理信号很简单,并且不会中断程序的正常运行逻辑。 想监听一个信号只需要调用Notify函数 func Notify(c chan<- os.Signal, sig …os.Signal) sig 表示你希望监听的信号,如果不设置表示监听所有的信号。 c 表示当信号发生时,系统会往该channel中写入发生的信号。 如果不想监听信号则可以调用stop func Stop(c chan<- os.Signal) 实例解析
golang    2015-10-27 21:23:04    686    0    0
最近打算介绍go语言编写的开源类库架构分析,自己最开始使用go语言是做爬虫的,采用的是gocrawl, gocrawl是一个使用go语言编写的开源爬虫类库,今天来分析下gocrawl的实现。 示例代码 package gocrawlimport ( "github.com/PuerkitoBio/goquery" "net/http" "regexp" "time")// Only enqueue the root and paths beginn
golang    2015-10-27 21:23:00    4206    0    0
golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一: 1. 不支持正则路由, 这个是比较致命的 2. 只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构 而gorilla/mux是一个强大的路由,小巧稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以
golang    2015-10-09 23:16:15    8143    0    0
glog简介 glog是著名的google开源C++日志库glog的golang版本,glog是一个轻量级的日志库,上手简单不需要配置文件并且稳定高效,但是可以自定义控制的内容就少了。 glog主要有以下几个特点: 1. glog有四种日志等级INFO < WARING < ERROR < FATAL,不同等级的日志是打印到不同文件的,低等级的日志文件中(INFO)会包含高等级的日志信息(ERROR) 2. 通过命令行传递参数 –log_d
1/2