go-redis源码分析(一):redis协议

redis.v5是一款基于golang的redis操作库,封装了对redis的各种操作 源码地址是https://github.com/go-redis/redis Redis客户端的工作本质上是基于tcp协议向redis server传输符合redis协议的命令请求,并根据redis协议解析server端的返回值我们可以通过telnet工具来模拟这一过程,例如ping命令我们可以这样发送请求 $ telnet 127.0.0.1 6379 Trying 127.0.0.1... Connect...阅读全文

2017.03.09 04:09 蔡健雅的红色高跟鞋
阅读:2570 评论:0

go依赖管理-govendor

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。 下面简要介绍一个我在项目中用到的 -- govendor。该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。对于 govendor 来说,依赖包主要有以下...阅读全文

阅读:41467 评论:3

Golang的docker尝试

一、 前言 docker 就不在这里介绍了,相关的文档已经很完善,中文文档 Docker —— 从入门到实践 写的很棒,推荐去看看。 docker 基于 Golang 开发,已经不用解释了,而 Golang 天生适合运行在 docker 容器中,却不是这个原因,这得益于:Golang 的静态编译,当在编译的时候关闭 cgo 的时候,可以完全不依赖系统环境。 二、 Golang代码 我们打算在 docker 中测试 Golang ,所以先编写一个 Golang 的测试代码。 新建文件:vi mai...阅读全文

2017-10-20 21:03:16 dingdayu
阅读:8975 评论:0

Go test 少为人知的特性

大多数的 Go 程序员都知道和喜欢用 `go test`,这个测试工具来自于 Go 官方的 `gc` 工具链。(想要执行测试代码)这个命令可能是最简单的了,而且还能做得很漂亮。 大家都知道,运行 `go test` 命令将执行当前目录下的包的测试代码,它会寻找 `*_test.go` 文件,并在这些文件中,寻找符合 `TestXxx(*testing.T){}` 命名的函数和参数(即,接收 `*testing.T` 参数的函数,命名为 `TestXxx`,`Xxx` 可以是任何不以小写字符...阅读全文

阅读:15215 评论:2

【Go并发编程】第一篇 - Goroutines调度

进程和线程 当运行一个应用程序的时候,操作系统会给这个应用程序启动一个进程。我们可以将进程看作一个包含应用程序在运行中需要用到和维护的各种资源的容器。一个进程至少包含一个线程,这个线程就是主线程。操作系统会调度线程到不同的CPU上执行,这个CPU不一定就是进程所在的CPU。 进程:资源的所有权 线程:执行和调度的基本单位 同一进程下的各个线程共享资源,但寄存器、栈、PC不共享 Go调度 基本术语 Go Runtime管理调度,垃圾收集和Goroutine的运行时环境。这里我们只谈调度器。 Run...阅读全文

阅读:902 评论:2

go语言中int和byte转换

主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性;例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考;一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 —> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高位字节 地...阅读全文

2018-11-11 12:34:39 wuzhc
阅读:29766 评论:1

Golang并发模型:并发协程的优雅退出

goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。这篇文章介绍,如何合理的退出goroutine,减少软件bug。 goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。但也无需为退出、关闭goroutine而烦恼,下面就介绍3种优雅退出goroutine的方法,只要采用这种最佳实践去设计,基本...阅读全文

阅读:7762 评论:0

总结了才知道,原来channel有这么多用法!

这篇文章总结了channel的10种常用操作,以一个更高的视角看待channel,会给大家带来对channel更全面的认识。 在介绍10种操作前,先简要介绍下channel的使用场景、基本操作和注意事项。 channel的使用场景 把channel用在数据流动的地方: 消息传递、消息过滤 信号广播 事件订阅与广播 请求、响应转发 任务分发 结果汇总 并发控制 同步与异步 ... channel的基本操作和注意事项 channel存在3种状态: nil,未初始化的状态,只进行了声明,或者手动赋值为...阅读全文

阅读:1016 评论:1

Go 的调度器追踪

## 简介 我喜欢 Go 语言的一个原因就是因为它可以生成分析和调试信息。当程序在执行的时候 Go 有一个特殊的环境变量 GODEBUG,它在运行阶段可以生成调试信息。你可以获取程序回收器和调度器的概要信息以及详细的信息。更主要的是你不需要添加任何的额外工作重新编译就可以完成调试 在这篇文章里,我将通过一个简单的 Go 程序演示如果使用调度跟踪信息。如果你对调度器有一定的了解那么它对你是用的。我建议先阅读下面两篇文章: 并发、goroutines 和 GOMAXPROCS ...阅读全文

2019-03-30 17:07:19 flyup_chen
阅读:2768 评论:0