Go 1.9中值得关注的几个变化

Go语言在2016年当选tiobe index的年度编程语言。 转眼间6个月过去了,Go在tiobe index排行榜上继续强势攀升,在最新公布的TIBOE INDEX 7月份的排行榜上,Go挺进Top10: 还有不到一个月,Go 1.9版本也要正式Release了(计划8月份发布),当前Go 1.9的最新版本是go1.9beta2,本篇的实验环境也是基于该版本的,估计与final go 1.9版本不会有太大差异了。在今年的GopherChina大会上,我曾提到:Go已经演进到1.9,接下来是G...阅读全文

七月 14, 2017 bigwhite
阅读:18185 评论:0

用Go实现TCP连接的双向拷贝

------ 最简单的实现 ------ 每次来一个Server的连接,就新开一个Client的连接。用一个goroutine从server拷贝到client,再用另外一个goroutine从client拷贝到server。任何一方断开连接,双向都断开连接。 func main () { runtime . GOMAXPROCS ( 1 ) listener , err := net . Listen ( "tcp" , "127.0.0.1:8848" ) if err != nil { ...阅读全文

2017-09-25 18:34:38 陶文
阅读:2471 评论:0

调度器学习

概要 本文从几个角度入手,描述和学习调度器原理 讲解调度器的基本概念 go语言的作者实现的C的协程库 libtask 源码分析,以理解协程的原理 golang的调度器原理 任务调度概念 任务与任务控制块(TCB) linux中称为进程控制块(PCB),即包含任务相关的数据结构,包含任务执行过程中的所有信息。 任务的名字 task name 任务的ID task id 任务的状态 task status 任务的优先级 task priority 任务的上下文(寄存器、堆栈指针、程序计数器(PC) ...阅读全文

2017.09.27 15:40 zengfan
阅读:1373 评论:5

剖析Go的读写锁

源码级剖析Go标准库中的sync.RWMutex。 概述RWMutex,读写锁,又称“读写互斥锁”。读写锁简单来说就是可以由任意数量的读者同时使用,或者只由一个写者使用的锁。 读写锁和互斥量(Mutex)类似,但是比起互斥量有着更高的并行性,它允许多个读者同时读取,因此有一些特殊的应用场景。在并发编程的很多场景下,数据的读取可能比写入更加频繁,这时就要允许多个线程同时读取一块内容。 用例Go中,RWMutex的零值是一个未加锁的互斥量。 RWMutex使用起来相对比较简单,这里举一个简单的例子:...阅读全文

2017-09-27 00:00 zablog.me
阅读:3197 评论:0

用 Go 构建一个区块链 ---- Part 1: 基本原型

翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。如果想直接运行代码,也可以 clone GitHub 上的教程仓库,进入 src 目录执行 make 即可。 引言 区块链是 21 世纪最具革命性的技术之一,它仍然处于不断成长的阶段,而且还有很多潜力尚未显现出来。 本质上,区块链只是一个分布式数据库而已。 不过,使它独一无二的是,区块链是一个公开的数据库,而不是一个私人数据库,也就是说,每个使用它的人...阅读全文

2017-10-19 09:04:44 liuchengxu
阅读:4709 评论:1

使用 Delve 调试 Go 服务的一次经历

> Vladimir Varankin 写于 2018/12/02 某天,我们生产服务上的几个实例突然不能处理外部进入的流量,HTTP 请求成功通过负载均衡到达实例,但是之后却 hang 住了。接下来记录的是一次调试在线 Go 服务的惊心动魄的经历。 正是下面逐步演示的操作,帮助我们定位了问题的根本原因。 简单起见,我们将起一个 Go 写的 HTTP 服务作为调试使用,这个服务实现的细节暂时不做深究(之后我们将深入分析代码)。一个真实的生产应用可能包含很多组件,这些组件实现了业...阅读全文

2019-01-27 13:19:27 hantmac
阅读:7165 评论:1