• 如何在 Golang 中使用 MongoDB 构建微服务

    如今,Golang 越来越流行于编写 RESTful 微服务。这些服务常常使用 MongoDB 作为持久性存储。在本文中,我们将使用 Go 和 MongoDB 构建一个简单的 *书店* 微服务。我们将使用 *mgo* 驱动程序连接 MongoDB,并使用 *curl* 测试微服务。 ## MongoDB MongoDB 以其简单、高可用性和面向文档的特性风靡市场。与关系型相比,文档化的优点是: + 文档化在许多编程语言中可以对应原生数据类型。 + 嵌入式文档和数组减少了对高昂...

  • 120
    介绍 Corral:一个无服务器的 MapReduce 框架

    这篇文章给出了一个我们最新项目的技术概述和架构设计理由,corral —— 一个无服务的 MapReduce 框架。 我最近在用 Hadoop 和 Spark 为一个我帮助教学的班级工作。PySpark 的确很棒,但是 Hadoop MapReduce 我从来没有真正关注,直到我发现 [mrjob](https://pythonhosted.org/mrjob/)。MapReduce 的观念是极为强大的,但是大量的样板文件需要用 Java 编写,甚至是一个简单的 Hadoop 作业,在我看...

  • 用 runtime 包做 Go 应用的基本监控

    您可能想知道——特别是如果您刚开始使用 Go,该如何给您的微服务应用添加监控。正如那些有跟踪记录的人告诉您——监控是很困难的。那么我要告诉您的是至少基本的监控不是那样的。您不需要为您的简单应用启动一个 [Prometheus](https://prometheus.io/) 集群去获得报告,事实上,您甚至不需要额外的服务去添加一个您的应用统计的简单输出。 但是我们的应用程序的哪些特性是我们感兴趣的呢?这个 Go 的 [runtime](https://golang.org/pkg/runt...

  • Go 测试风格指南

    Go 测试的一个小风格(自认为)指南。关于写好测试的文章比我在这写的要多的多。但我写的主要是关于风格而不是技术。 ## 使用 table-drive 测试,并始终使用 tt 作为测试用例 尝试在可行的情况下使用 table-driven 测试,但当不可行时,可以复制一些代码;不要强制使用它(例如,有时候除了一两个案例之外,更容易为这之外的情况编写一个 table-driven 的测试;实际情况就是如此)。 始终为一个测试用例使用相同变量名会使它更容易为大量代码工作。你不必使用 ...

  • Go 语言中的比较操作符

    这篇文章专注于 6 个操作符,==,!=,<,<=,> 和 >=。我们将深入探讨它们的语法和用法的细微差别。对很多人来说,这听起来不像是吸引人的事,或者他们可能已经从其他编程语言获得了糟糕的经验。然而,在 Go 中它们定义的很好并简洁。下面讨论的主题,如可比性将出现在其他场合,如 maps。为了使用上述操作符,至少有一个操作数需要[可赋值](https://studygolang.com/articles/12381)给第二个操作数: ```go package main import...

  • 在 Go 语言中自动插入分号

    正式的语法指定什么是在 Go 语言(或者其他的语言)中依据语法构成有效的程序。 ``` Block = "{" StatementList "}" . StatementList = { Statement ";" } . ``` 以上定义取自 Go 规范。它使用[扩展的 Backus-Naur](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form) 形式(EBNF)。这意味着代码块是用分号分隔的一个或...

  • Go 语言中的方法(第一部分)

    Golang 程序中定义的类型有与其相关的方法。让我们来看一个例子: ```go type T struct { name string } func (t T) PrintName() { fmt.Println(t.name) } func main() { t := T{name: "Michał"} t.PrintName() } ``` 正如您可能怀疑程序输出名字。方法是一个函数,拥有附加的,单独元素的参数列表,称之为接...

  • 120
    理解 golang 中的 context(上下文) 包

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/understanding-the-context-package-in-golang/0_exTPQ4ppfrdjuXcR.jpg) Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。这是一个基本教程,介绍如何在项目中使用它以...

  • 使用 Go 在 WASM 中进行图像处理的实验

    Go 的主分支最近完成了一个 WebAssembly 的工作原型实现。作为 WASM 的爱好者,我自然要把玩一下。 这篇文章,我要记下周末我用 Go 做的处理图像实验的想法。这个演示只是从浏览器中获取图像输入,然后应用各种图像变换,如亮度,对比度,色调,饱和度等,最后将其转储回浏览器。这测试了两件事 - 简单的CPU绑定执行,这是图像转换应该做的事情,以及在 JS 和 Go 之间传递数据。 ## 回调 应该明确如何在 JS 和 Go 之间进行调用,不是我们在 emscripte...

  • 关于 Go 即将支持的 WebAssembly 的一些注意事项

    这是一篇关于 webassembly 的即时记录,它的目的是给我做个备忘而不仅仅是如果使用它的教程。 即将发布的 Go 1.11 版本将支持 Wasm。@neelance 做了大部分的实施工作。对 wasm 的支持已经可以通过他在 github 上的工作分支进行测试。 看[这篇文章](https://blog.gopheracademy.com/advent-2017/go-wasm/)了解更多信息 ## 工具链设置 要从 go 源码生产一个 wasm 文件,您需要...

  • 在 Go 中使用 Time, Timezones 和 Location

    今天我遇到个问题。我在编写代码处理 NOAA 的潮汐站 XML 文档时,很快意识到我遇到了麻烦。这是一小段 XML 文档: ```xml <timezone>LST/LDT</timezone> <item> <date>2013/01/01</date> <day>Tue</day> <time>02:06 AM</time> <predictions_in_ft>19.7</predictions_in_ft> <predictions_in_cm>600</predic...