我不打算说指针的好话,它确实很难理解。如果应用不当,会产生恼人的 bug,甚至会导致性能问题。当写并发和多线程程序时更是如此。所以许多语言试着用其它方法让编程人员避免指针的使用。但如果你是在用 Go 语言的话,你就不得不使用它们。如果不能很好的理解指针,是很难写出干净、简单并且高效的代码的。 我要晨读

已有595人晨读

Go 语言中一些语法结构和其背后的设计原则,包括指针、栈、堆、逃逸分析和值/指针传递。这是第三篇,主要介绍堆和逃逸分析。( 我要晨读

已有464人晨读

Go 中的 reflect 包提供了根据执行过程中对象的类型来改变程序控制流的 API。 reflect 包提供了两个重要的结构 - Type 和 Value。 我要晨读

已有578人晨读

问题场景:高频系统中,agent 会向ATS 服务器发出刷新和预缓存的请求,这里的请求head 里面有GET ,PURGE等,因为一般的预缓存都是小文件,但是某天,突然服务器oom。。。罪魁祸首发现是并发GET 大文件将服务器打死了。第一个版本是python 的,第二个版本是golang 实现的, 这里记录下两种语言的 下载大文件的实现方式。 我要晨读

已有749人晨读

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 我要晨读

已有1069人晨读

一旦 Go 开发人员和工具都共享了包版本控制的词汇表, 那么在工具链中添加可复制, 可验证以及已验证的构建就相对简单了。事实上, 这基本上已经在 vgo 原型中了. 我要晨读

已有601人晨读

由于go语言与c语言有着千丝万缕的暧昧关系,两者之间的调用可以通过语言层面实现。下文是对此的总结。 我要晨读

已有713人晨读

通道和 goroutine 是 Go 语言基于 CSP( communicating sequential processes ,通信顺序进程)并发机制的核心部分。阅读本文可以学到一些关于channel的提示和技巧,尤其是“缓冲” channel ,在 “生产者-消费者” 情境中广泛使用了缓冲通道作为队列。 我要晨读

已有883人晨读

即使使用了 Go 4 年,我仍然会被这门语言震惊到。多亏了编译器执行的静态代码分析,编译器可以对其生成的代码进行一些有趣的优化。编码器执行的其中一种分析称为逃逸分析。这会对内存管理进行优化和简化。 我要晨读

已有694人晨读

为了理解 Go 为什么能更好地处理并发性,首先需要知道什么是并发性 1。并发性是独立执行计算的组成部分:是一种更好地编写与现实世界进行良好交互的干净的代码的方法。通常,即使并发不等同于并行,人们也会将并发的概念与并行的概念混淆:是,尽管它能够实现并行性。所以,如果你只有一个处理器,你的程序仍然可以并发,但不能并行。另一方面,良好的并发程序可以在多处理器上并行运行 2。这一特性是非常重要的。让我们来谈谈 Go 如何让程序利用在多处理器 / 多线程环境中运行的优势。或者说,Go 提供了什么工具来编写并发程序, 我要晨读

已有778人晨读

每一天,或者是每隔几天,总有人来到 /r/golang ,并询问些类似如下的问题“哪个框架是最好的?”。我认为我们应该尝试提出这个问题,至少以一种容易理解的方式提出。你不应该使用框架。 我要晨读

已有710人晨读

只要你写过 Go 程序,肯定已经知道 Go 语言内置了一个功能完备的测试库。在这篇文章中我们将列出几种能帮助你提高编写测试能力的策略。这些策略是我们在以往的编程经历中总结出的可以很好的节省你的时间和精力的经验。 我要晨读

已有722人晨读

又到了Go语言新版本的发布时间窗口了!这次的主角是Go 1.10。那这次版本更新有哪些值得关注的变化呢?来自 tonybai 的系列文章:《Go x.xx 中值得关注的几个变化》 我要晨读

已有728人晨读

名字在 golang 中的重要性和在其他任何一种语言是一样的。他们甚至含有语义的作用:在一个包的外部某个名字的可见性是由这个名字首字母是否是大写来决定的。那么,如何调用私有函数? 我要晨读

已有795人晨读

上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。 我要晨读

已有628人晨读