• 以编程方式查找 DNS 记录

    DNS 记录是与 DNS 服务器关联的映射文件,无论每个域名与哪个 IP 地址关联,它们都能处理发送到每个域名的请求。net 包包含各种方法来查找 DNS 记录的细节。让我们运行一些示例,收集有关 DNS 服务器的信息以及目标域名的相应记录: ## Go 程序查找域名的 A 记录 net.LookupIP() 函数接受一个字符串(domain-name)并返回一个包含主机的 IPv4 和 IPv6 地址的 net.IP 对象切片。 ```go package main ...

  • Goroutine 内存泄漏 - 被遗弃的接收者

    ## 介绍 Goroutine 内存泄漏是产生 Go 程序内存泄漏的常见原因。在我之前的[文章](https://www.ardanlabs.com/blog/2018/11/goroutine-leaks-the-forgotten-sender.html)中,我介绍了 Goroutine 内存泄漏,并展示了许多 Go 开发人员容易犯错的例子。继续前面的内容,这篇文章提出了另一个关于 Goroutines 如何出现内存泄露的情景。 ## 泄漏:被遗弃的接收者 ***在此内存...

  • 使用 CGO 和 GoReleaser 进行跨平台编译

    我参与了一个开源项目 [Mailchain](https://github.com/mailchain/mailchain) ,该项目使用 Go 语言。我想使用 `CI\CD` 轻松的创建版本。 Golang 是一种允许以简单的方式编译代码,并在不同的操作系统上执行的语言。我发现了一个很棒的工具 [https://goreleaser.com/](https://goreleaser.com/) ,它可以用来构建,打包和发布二进制文件。 这是在 Mac 上构建的命令。 ```bash...

  • 如何使用 Go kit 工具包编写微服务

    我在互联网上搜索了很久关于使用 Go kit 工具包编写微服务的精品教程(我认为我的 Google-fu 相当不错),但是 我没有找到 ...... 来自[Go kit 代码库的示例](https://github.com/go-kit/kit/examples) 很好,但恕我直言,文档很枯燥。 然后我决定购买这本名为 `Go Programming Blueprints, 2nd Edition` 的书,这本书相当不错,但只有两章专门讨论 Go kit(一个用于实际开发微服务...

  • 如何在 Golang 中为 RESTful 微服务创建健康检查

    想象一下,您最近发布并部署了一段很酷的 RESTful 微服务,您已经使用了一段时间。您松了一口气却听到 Ops 团队说您的服务不稳定。您真的很确定服务应该没问题,可能是它依赖的服务有问题。那该怎么办? 健康检查将来拯救你。它是您的服务返回状态的端点,包括您的服务直接依赖的所有外部服务的连接状态。在这篇文章中,我将展示如何为在多个节点上运行的微服务创建健康检查,该服务将其状态存储在 MongoDB 中并调用 Elasticsearch > 对你的服务应该监控外部服务,会感觉到非常诧异...

  • 在 Go 中使用服务对象

    服务对象是 `Ruby on Rails` 中一个高度可用的模式,它能够保持控制器和模型简洁干净并从两者中删除域逻辑。在我看来,服务对象是单一责任原则以及通过依赖注入分配责任的一个很好的例子。 一般而言,`SOLID` 及其背后的理念允许编写可测试的代码,这对于更改非常灵活。`Robert "Uncle Bob" Martin` 推动了这些原则。`SOLID` 原理理论在 2000 年的论文 [`Design Principles and Design Patterns.`](https:...

  • 使用 Go 和 LLVM 进行 Web Assembly 的高效前端开发

    我今天想分享一个非常酷的项目[tinygo](https://tinygo.org/) 经历。 首先让我说 Go 中的 Web Assembly 有一个大问题,它太过依赖于完成任务而定制的 API。在我看来 `syscalls/js` 是错误的使用 Web Assembly 方式: - Go 开发者不应该学习 JavaScript - 随着时间的推移,Web Assembly 将获得自己的 API,可能基于[WebIDL](https://github.com/WebAssembl...

  • Go 装饰器模式教程

    装饰器在其他编程语言(如 Python 和 TypeScript)中肯定更为突出,但这并不是说你不能在 Go 中使用它们。事实上,对于某些问题,使用装饰器是完美的解决方案,通过本教程中我们可以了解到装饰器的用法。 ## 了解装饰器模式 > 装饰器本质上允许您包装现有功能并在开始或结尾处添加您自己的自定义功能。 在 Go 中,函数被视为第一等对象,这实际上意味着您可以像传递变量一样传递它们。我们来看一个非常简单的例子: ```go package main impo...

  • 在 Go 中构建网络命令行界面

    在本文中,我们将使用 `Github` 上提供的软件包 `urfave/cli` 在 Go 中构建一个非常简单的命令行界面,软件包位于 https://github.com/urfave/cli。 我最近在各种托管服务提供商中进行了一次或两次域名迁移,并认为构建一个可用于查询网站名称服务器,CNAME,IP 地址等内容的工具或程序是一个很酷的主意。 本教程的总体目标是让您了解如何构建自己的 CLI,这些 CLI 可以执行各种其他操作,例如网络监视,图像处理等。 > 注 - 可在...

  • 深入理解 Go 语言中的 Testable Examples

    隐藏的 `ast` 和 `parser` 包的介绍 2016 年 10 月 10 日 Golang 的工具链实现了名为 `Testable Examples` 的功能。如果对该功能没有什么印象的话,我强烈建议首先阅读[“ Testable Examples in Go ”](https://blog.golang.org/examples) 博文进行了解。通过这篇文章我们将了解到该功能的整个解决方案以及如何构建其简化版本。 让我们看看 `Testable Examples` 的...

  • 120
    Golang 和本地数据存储 - 快速灵活的数据存储

    如果要构建包含多个实例或者多个丰富数据模式的 Web 应用程序,本地数据存储可能不适用。但是在寻找真正的快速临时存储或者构建自己的副本的时候,本地存储却是需要了解的一个重要的组成模块。 在这篇文章中,我将展示如何在 Go 中使用 Memcached 协议来构建一个名为 Beano 的本地键 / 值对数据库服务器,并且该数据库可以优雅地热交换其整个数据集。 ## Go 数据存储类库的简单选择 我已经使用过 SQLite,BerkeleyDB 并了解 InnoDB,但出于种种原因,...

  • 使用 Go(Golang)实现 OAuth2.0

    2018 年 7 月 1 日 OAuth2 是一种身份验证协议,用于使用其他服务提供商来对应用程序中的用户进行身份验证和授权。 本文将介绍如何构建 Go 应用程序  来实现 OAuth2 协议。 > 如果您想查看代码,可以在[此处](https://github.com/sohamkamani/go-oauth-example) 查看 ## OAuth2 流程 在我们开始实现之前,让我们简要介绍一下 OAuth 协议。如果您曾经见过类似这样的对话框,那么您可能对 ...

  • 理解 Go 编程中的 slice

    自从我开始使用 Go 编程以来,slice 的概念和使用一直令人困惑。slice 看起来像一个数组,感觉就像一个数组,但它们不仅仅是一个数组,对我来说是一种全新的概念。我一直在阅读 Go 程序员如何使用 slice,我认为现在终于明白了 slice 的用途。 Andrew Gerrand 撰写了一篇非常棒的关于 slice 的博文: http://blog.golang.org/go-slices-usage-and-internals 没有理由重复 Andrew 所写的一切,...