Go语言中文网 为您找到相关结果 8

go语言的select 与chan

chan是golang非常重要的一个概念,用于在不同的goroutine之间通信或共享数据,是go推荐的共享数据的方式。 chan有默认的deadlock检测机制,例如这段代码 http://play.golang.org/p/_0UWFWiGOr 运行的时候会提示: fatal error: all goroutines are asleep – deadlock! chan可以与select相结合,当chan与select结合的时候,有一个很有意思的现象,就是chan会变成非阻塞的 更有趣的是time.Timer,chan与select相结合的例子,每次select的chan case发生时,都会重置timer。一个极端的例子,select中,只有timer和default时,这个程序将...阅读全文

博文 2015-03-24 23:24:13 铁哥

用 Testify 来改善 GO 测试和模拟

## 目录 - [入门指南](# 入门指南 ) - [一个简单的示例](# 一个简单的示例 ) - [否定测试案例和 Nil 测试](# 否定测试案例和 -Nil- 测试 ) - [将 Testify 与表驱动测试相结合](# 将 -Testify- 与表驱动测试相结合 ) - [模拟](# 模拟 ) - [模拟示例](# 模拟示例 ) - [用 Mockery 生成模仿对象](# 用 -Mockery- 生成模仿对象 ) - [关键点](# 关键点 ) - [总结](# 总结 ) - [延伸阅读](# 延伸阅读 ) 断言是我感觉 Go 中的标准库真正缺失的东西。你绝对可以通过 `if` 比较或者其他任何方式获得相同的结果,但那不是写测试文件最简洁的方法。 这就需要诸如 [stretchr/...阅读全文

博文 2018-12-09 18:20:41 polaris

【十问十答】对话Go语言开发团队

Go是谷歌推出的一门编程语言。熟悉Go语言的开发者都知道其弥补了C语言的不足并且保持了C的极简主义。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程(使用Go语言的12个理由)。一些主流的项目包括Docker、Heroku's Force.com以及Cloud Foundry's (Go)Router都是基于Go语言编写而来。有人说,Go为云而生,也正是由于其拥有并发性的操作系统以及完美的架构,使其备受开发者的青睐。 本文摘译自dotGo,文中采访了Go语言的开发团队,一起来聆听大神们谈Go语言的依赖关系、语言设计及Android平台上的一些新特性。 译文如下: Go语言开发团队成员:Francesc Campoy Flores、Andrew Gerrand、Bra...阅读全文

博文 2014-10-21 10:59:34 mengyidan1988

Kubernetes 灾难恢复管理系统Heptio Ark

Heptio Ark 是一款用于 [Kubernetes](https://www.oschina.net/p/kubernetes) 集群资源和持久存储卷(PV)的灾难恢复管理系统。 Heptio Ark 提供了一个简单、可配置和可操作的强大方法来从一系列检查点备份和恢复应用和 PV ,这允许你在以下情况更好地自动化: **减少灾难恢复 TTR(响应时间):** 基础设施损坏 数据损坏 服务中断 **Kubernetes API 对象的跨云供应商迁移** (不支持持久卷快照的跨云提供商迁移) **通过 prod 环境复制开发和测试环境设置(+ CI)** 更具体地说,Heptio Ark 是将一个集群内服务与一个 CLI 相结合,可记录: Kubernetes A...阅读全文

用 Go 编写的类 Ruby 语言Rooby

Rooby 是一种面向对象的语言,可以看作是 Go 和 Ruby 的结合体,旨在实现高效微服务开发。 Can be compiled into bytecode (with `.robc` extension) Can evaluate bytecode directly Everything is object Support comment Object and Class Top level main object Constructor Support class method Support inheritance Support instance variable Support self Variables Constant Local vari...阅读全文

Golang分代GC的策略

序 上一篇文章中讲解了Go分代GC的实现思路,还有一个问题没有讲解,Go中分代GC(Garbage Collection)的策略,如何穿插使用Minor GC和Major GC ? 为何要穿插使用? file 图片仅用作说明,有些地方不是很严谨,也与Go的GC方式不完全相同。 因为每轮GC都会有新的存活对象,存活下来的对象即被认为是老年代对象,这些对象在执行Minor GC期间是不会被清扫的,这也就会导致使用的堆内存会越来越大。经过几轮GC之后有些老年代对象可能已经不可达,可以被回收了,这时就要进行Major GC来进行完整的清扫,不论老年代对象和新生代对象,只要不再存活,就会被清扫回收掉,达到释放内存的目的。 上一篇文章也有说到,Go将分代GC算法与标记清扫算法相结合,实现了一个不移动的分...阅读全文

博文 2019-05-01 21:34:41 Leonard_Wang

关于 Golang defer 的使用规则和案例

golang defer 这个使用的执行流程一直很绕,所以决定写一篇文记录一下。 规则一:当defer被声明时,其参数就会被实时解析 案例一 package main import ( "fmt" ) func main() { test() } func test() { defer f1(f2()) fmt.Println("2") return } func f1(i int) int { return i } func f2() int { fmt.Println("1") return 1 } 输出:12 案例二 package main import ( "fmt" ) func main() { defer getFunc()() fmt.Println("2") } func...阅读全文

博文 2020-04-21 17:35:16 DukeAnn