GCTT - Go 中文翻译组

收录了 214 篇文章 · 145 人关注

  • 在 Go 运行时中的 Strings

    ## 动机(Movivation) 可以认为这是对 [Rob Pike](https://ai.google/research/people/r) 的一篇关于 Go 字符串的[博客](https://blog.golang.org/strings)的解释。以 Go 程序员的思维来写。 在博客文章中,他说没有什么证据可以证明 Go 字符串是以 slices 的方式实现。我猜这不是他的疏忽,但起码可以证明一点,这不是这篇博客的核心。再说,任何想要自己研究的都可以在使用 Go 代码的过程中...

  • 在 Go 中发现竞态条件 (Race Conditions)

    当我意识到我一直在处理和解决的问题有一个专有名词描述的时候,我总会觉得这事十分有趣。这次出现这种情况的是竞争条件(Race Conditions)。当你处理多个 routine 共享某类资源的时候,不可避免的需要考虑到这个。如果你未曾在你的代码中考虑过这个问题,现在就是一个不错的时候。 竞争条件是:当两个或两个以上的 routines 访问相同资源的时候,例如一个变量或者结构体,并且在不考虑其他 Gorutines 的情况下对资源进行读/写。这类代码能够造成你所能见到的最令人头疼,最随机的...

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

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

  • Go 中的 import 声明

    Go 中的程序由各种包组成。通常,包依赖于其它包,这些包内置于标准库或者第三方。包首先需要被导入才能使用包中的导出标识符。这是通过结构体调用 *import 声明* 来实现的: ```go package main import ( "fmt" "math" ) func main() { fmt.Println(math.Exp2(10)) // 1024 } ``` 上面我们有一个 import 导入的例子,其中包含了两行导入声...

  • webhook 是什么以及如何创建

    我们在网上做的工作,大部分其实就是事件,webhooks 已经成为了连接系统的主要方式,不管是用户创建、支付成功、DockerHub 镜像推送或者 Git 仓库上的合并请求,这些都是非常有用并且轻量级的共享信息的方式 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/webhook/1.png) 那么,webhook 究竟是什么呢?webhook 是应用给其它应用提供实时信息的一种方式。信息一产生...

  • Go 中的数据结构 -- Interface

    Go 中的 interface 可以静态编译,动态执行,是最让我感到兴奋的一个特性。如果要让我推荐一个 Go 语言的特性给其他的语言,那我一定会推荐 interface。 本文是我对于 Go 语言中 interface 类型在 gc 编译器上实现的一些想法。Ian Lance Taylor 写了两篇关于 interface 类型在 gccgo 中实现的[文章](https://www.airs.com/blog/archives/277)。本文与之最大的不同是本文有一些图片可以更形象的说明...

  • Go 语言的内存管理

    这篇博客是我在维尔纽斯的 [Go Meetup](https://www.meetup.com/Vilnius-Golang/events/249897910/) 演讲的总结。如果你在维尔纽斯并且喜欢 Go 语言,欢迎加入我们并考虑作演讲 在这篇博文中我们将要探索 Go 语言的内存管理,首先让我们来思考以下的这个小程序: ```go func main() { http.HandleFunc("/bar", func(w http.ResponseWriter, r *h...

  • 一个好的 Go 语言 Makefile 是怎样的

    精简的 Makefile,用于简化构建和管理用 Go 编写的 Web 服务器。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/a-good-makefile-for-go/makefile-process.gif) 我偶然调整我的 Makefiles 来加快我的开发过程,一天早上有点时间,我决定与大家分享其中诀窍。 总而言之,我使用 Go 构建 Web 服务器,我对 Makefile 的...

  • Go 语言中的同步队列

    ## 问题 假设我们在运营一家 IT 公司,公司里面有程序员和测试员。为了给个机会他们互相认识对方,并且让他们能够在工作中放松一点,我们买了一个乒乓球台,并且制定了如下规则: - 每次只能两个人(不能少于或多于两人)玩。 - 只有上一对玩家结束了,下一对玩家才能玩,也就是说,不能只换下一个人。 - 只能是测试员和程序员组成一对来玩,(不能出现两个测试员或者两个程序员一起玩的情况)。如果员工想要玩的话,那么他得等到有合适的对手了才能开始游戏。 ```go func main...

  • 我们必须遵循的 12 个 Go 语言最佳实践

    本文旨在提供一个切实的指导,在 Go 语言中实现最佳实践和设计模式。这些编程技巧可以帮助开发者编写出较好的代码。你一定已经读过了 [Go Tutorial](https://tour.golang.org/welcome/1) 和 [Effective Go](https://golang.org/doc/effective_go.html)。 为了让大家对这些编程技巧有更加深刻的认识,我在讨论这些最佳实践的时候会附加一些示例代码。 那些编写了许多优秀代码的大师们,一直在使用一些 G...

  • Go 的依赖注入

    过去几年里我一直使用 Java。最近,用 Go 建立了一个小项目,然而 Go 生态系统中依赖注入(DI)功能缺乏让我震惊。于是我决定尝试使用 Uber 的 [dig](https://github.com/uber-go/dig) 库来构建我的项目,期间感触颇深。 我发现 DI 帮助我解决了之前在 Go 应用程序中遇到的很多问题 - 过度使用 `init` 函数,滥用全局变量和复杂的应用程序设置等。 在这篇文章中,我将介绍 DI ,然后在使用 DI 框架(通过 `dig` 库)前后写...

  • 深入理解 sync.RWMutex:解决读者-写者问题

    在某个数据需要被多个线程共享访问的时候,会出现读者-写者问题(这里的「问题」是复数形式的,因为读者-写者问题有多个变种)。访问共享数据的线程有两种类型:读者和写者。读者只会读取数据,而写者则是修改它。当写者拥有了访问数据的权限后,其它的线程(不管是读者还是写者)都不能访问这个数据。这种约束的需求在现实中是存在的,比如:当写者不能原子性地修改某个数据(例如数据库)时,在修改完成之前,要读取这个数据的读者要被阻塞,以免读者获取到损坏的数据(脏数据)。对于读者-写者问题的核心,还有很多修订的限制,比如...

  • 在 Go 语言中使用 Log 包

    Linux 在许多方面相对于 Windows 来说都是独特的,在 Linux 中编写程序也不例外。标准输出,标准 err 和 null devices 的使用不仅是一个好主意,也是一个原则。如果您的程序将记录日志信息,则最好遵循目标约定。这样,您的程序将兼容所有 Mac/Linux 工具和托管环境。 Go 在标准库中有一个 log 包和 logger 类型。使用 log 包将为您提供成为优秀公民 (译注:指 log 包兼容性非常好) 所需的一切。您将能够写入所有标准设备,自定义文件或支持 ...

  • Go 语言中的 Timer Routines 与优雅退出

    在我的 Outcast(译注:作者自己做的一款天气预告 App) 数据服务器中,有几个数据检索任务要用到不同的 Go routine 来运行, 每个 routine 在设定的时间间隔内唤醒。 其中最复杂的工作是下载雷达图像。 它复杂的原因在于:美国有 155 个雷达站,它们每 120 秒拍摄一张新照片, 我们要把所有的雷达图像拼接在一起形成一张大的拼接图。(译注:有点像我们用手机拍摄全景图片时,把多张边缘有重叠的图片拼接成一张大图片) 当 go routine 被唤醒去下载新图像时,它必须尽快为...

  • Go 迭代切片 (Iterating Over Slices In Go)

    切片在我的代码中随处可用。如果我正在使用 MongoDB 中的数据,它将存储在切片中。如果我需要在运行操作后跟踪一系列问题,它将存储在一个切片中。如果你还不了解切片是如何工作的,或者像我在开始时一样避免使用切片,请阅读下面这两篇文章以了解更多信息。 [理解 Go 中的 slice](http://www.goinggo.net/2013/08/understanding-slices-in-go-programming.html) [Go 中不定长度集合](https://study...

  • Go 语言中的选择器

    在 Go 语言中,表达式 `foo.bar` 可能表示两件事。如果 *foo* 是一个包名,那么表达式就是一个所谓的`限定标识符`,用来引用包 *foo* 中的导出的标识符。由于它只用来处理导出的标识符,*bar* 必须以大写字母开头(译注:如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用): ```go package foo import "fmt" func Foo() { fmt.Println("foo") } func bar() {...

  • 使用 Goroutines 池来处理基于任务的操作

    *作者注:使用 Go 语言工作了一段时间之后,我学会了如何使用无缓冲 channel 来构建 Goroutines 池,我喜欢这种方式胜于此文章中所展示的方式。话虽如此,此文章在它所描述的场景中依然有巨大价值。* 我在多个场合都被问到为什么使用工作池模式,为什么不在需要的时候启动所需要的 Goroutines?我的答案一直是:受限于工作的类型、你所拥有的计算资源和所处平台的限制,盲目地使用 Goroutines 将会导致程序运行缓慢,进而伤害整个系统的响应和性能。 每个程序、系统和平...

  • Go 程序在 macOS 上的打包功能

    这篇文章简单地说明了如何在 macOS 上打包一个 Go 的程序,包括引用或者不引用外部资源。作为一个原生的 Cocoa 程序它是可以下载、安装和运行的。开发过程并不需要 XCode,cgo 或者其他特殊的库文件。 在此文章结尾处,你的 Go 程序将会被打包进一个 `.app` 文件,成为一个拖放安装的只读 DMG 文件。这也适用于其他非 Go 语言的程序。 关于这个端到端的解决方案的主题还有其他很多的指导文章,有的讲的比我想要做的内容多很多,有的又是采用不同的方式,而我想呈现给你的...

  • 检测 Go 程序中按值传递的 locks

    `go tool vet -copylocks` 命令简介 Go 语言安装包附带 [vet](https://golang.org/cmd/vet/) 命令行工具。该工具能对程序源码运行一套启发式算法以发现可疑的程序结构,如无法执行的代码或对 `fmt.Printf` 函数的错误调用(指 arguments 没有对齐 format 参数): ```go package main import "fmt" func f() { fmt.Printf("%d\n") ...

  • goroutine 的同步(第二部分)

    > Channel 通信 第一部分介绍了发送与接收操作之间最直观的顺序关系: > *向一个 Channel 中发送数据先于接收数据。* 于是,我们能够控制分布于两个 goroutine 中的操作的顺序。 ```go var v int var wg sync.WaitGroup wg.Add(2) ch := make(chan int) go func() { v = 1 ch <- 1 wg.Done() }() go fu...

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

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

  • Go 语言中的两种 slice 表达式

    在此之前,已经有许多关于 Golang 中 slice 的介绍,比如 * [Go Slices: usage and internals](https://blog.golang.org/go-slices-usage-and-internals) * [How to avoid Go gotchas](https://blog.golang.org/go-slices-usage-and-internals) 本文只是关注于 slice 的表示方式,它们可以创建两种类型的值: ...

  • 在 Go 中探索 IEEE-754 标准

    在六月份时,Gustavo Niemeyer 在他的博客 [Labix.org](http://blog.labix.org/) 上提出了下面这个问题: *假设 uf 是一个无符号的 64 位整型,但包含的内容却是符合 IEEE-754 标准的二进制浮点数,你怎么去区分 uf 是表示整型还是浮点型呢?* 由于我对这方面的了解并不是很多,所以无法快速得出这个问题的答案,而且我也无法用语言来向你解释,只能通过写一个相关的程序来进行示范。幸运的是 Gustavo 发布了答案的思路,我认为非...

  • Go 测试风格指南

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

  • Go 语言 HTTP 请求超时入门

    在分布式系统中,超时是基本可靠性概念之一。就像这条 [tweet](https://twitter.com/copyconstruct/status/1025241837034860544) 中提到的,它可以缓和分布式系统中不可避免出现的失败所带来的影响。 ## 问题 > 如何条件性地模拟 504 http.StatusGatewayTimeout 响应。 当尝试在 [zalando/skipper](https://github.com/zalando/skipper/iss...

  • Go 语言的 Modules 系统介绍

    即将发布的 Go 语言 1.11 版本将会给我们带来对 *modules*(模块)的实验性支持,这是 Go 语言新的一套依赖管理系统。 (译注:很多编程语言中,把 modules 译作「模块」,但由于目前该机制在 Go 语言还没正式发布,因此尚未有非常普及的译法。而类似的 vendor 一词的翻译,大多中文文章都是采取保留英文原文的方式处理,因此本文对 modules 的翻译参考 vendor 的处理:保留英文原文) 前些日子,[我简单地写了一编关于它的文章](https://rob...

  • 我这几年来是如何编写 Go HTTP 服务的

    我是从 [r59](https://golang.org/doc/devel/pre_go1.html#r59) —— 1.0 之前的一个发布版本,就开始写 Go 了,并且在过去七年里一直在用 Go 构建 HTTP API 和服务。 在 [Machine Box](https://machinebox.io/?utm_source=matblog-3May2018&utm_medium=matblog-3May2018&utm_campaign=matblog-3May2018&utm_...

  • 1 行 Go 代码实现反向代理

    暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库。 ![This is all the code you actually require…](https://raw.githubusercontent.com/studygolang/gctt-images/master/reverse-proxy/1_y3GxXdKfZlqa95bl19Rytg.png) 为项目选择编程语言和挑选你最爱的球队不一样。应该从实用主义出发,根据特定的工作选择合适的工具。 在这篇文章中我会告诉你...

  • 120
    Go 中不定长度集合

    如果你在使用像 C# 或 Java 这样的编程语言后来到 go,你发现的第一件事就是没有像 `List` 和 `Dictionary` 这样的传统集合类型。 这真让我困惑了好几个月。 我找到了一个名为 `container/list` 的软件包,并且几乎用它做所有的东西。 我脑后一直有一个声音在唠叨。语言设计者不应该不直接支持对未知长度的集合管理的功能。每个人都在讨论切片是如何在语言中被广泛使用,但我只是在有明确定义的容量或者它们通过函数返回时我才使用切片,这有点不对劲!! 因此,我...

  • goroutine 的同步(第一部分)

    ![image](https://raw.githubusercontent.com/studygolang/gctt-images/master/sync-goroutine/part1.jpeg) 假设 Go 程序启动了两个 goroutine: ```go package main import ( "fmt" "sync" ) func main() { var v int var wg sync.WaitGroup ...

  • 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() } ``` 正如您可能怀疑程序输出名字。方法是一个函数,拥有附加的,单独元素的参数列表,称之为接...

  • Go 中的匿名函数和反射

    我最近在浏览 Hacker News 时看到一篇吸引我眼球的文章《[Python中的Lambdas和函数](http://www.thepythoncorner.com/2018/05/lambdas-and-functions-in-python.html?m=1)》,这篇文章 —— 我推荐你自己阅读一下 —— 详细讲解了如何运用 Python 的 lambda 函数,并举了一个例子展示如何使用 Lambda 函数实现干净,[DRY](https://en.wikipedia.org/wiki...

  • Go 语言中的 Monkey 补丁

    很多人认为 monkey 补丁只能在动态语言,比如 Ruby 和 Python 中才存在。但是,这并不对。因为计算机只是很笨的机器,我们总能让它做我们想让它做的事儿!让我们看看 Go 中的函数是怎么工作的,并且,我们如何在运行时修改它们。本文会用到大量的 Intel 汇编,所以,我假设你可以读汇编代码,或者在读本文时正拿着[参考手册](https://software.intel.com/en-us/articles/introduction-to-x64-assembly). **如果你...

  • 无停机优雅重启 Go 程序

    ## 什么是优雅重启 在不停机的情况下,就地部署一个应用程序的新版本或者修改其配置的能力已经成为现代软件系统的标配。这篇文章讨论优雅重启一个应用的不同方法,并且提供一个功能独立的案例来深挖实现细节。如果你不熟悉 Teleport 话,Teleport 是我们使用 Golang 针对弹性架构设计的 [SHH 和 Kubernetes 特权访问管理解决方案](https://gravitational.com/teleport/)。使用 Go 建立和维护服务的开发者和网站可靠性工程师(SRE)...

  • 理解 Go 语言的类型

    当我使用 C/C++ 编写代码时,理解类型(type)是非常有必要的。如果不理解类型,你就会在编译或者运行代码的时候,碰到一大堆麻烦。无论什么语言,类型都涉及到了编程语法的方方面面。加强对于类型和指针的理解,对于提高编程水平十分关键。本文会主要讲解类型。 我们首先来看看这几个字节的内存: FFE4 | FFE3 | FFE2 | FFE1 ---|---|---|--- 00000000 | 11001011 | 01100101 | 00001010 请问地址 FFE1 ...

  • Go 中的 “简单语句”

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/simple-statement/1_HO_nLfJ1LDrODqso68AcwA.jpeg) [https://en.wikipedia.org/wiki/Kiss_(band)](https://en.wikipedia.org/wiki/Kiss_%28band%29) 在 Golang [规范](https://golang.org/ref...

  • 在 Go 中使用 C 语言的动态库

    我和我的儿子在上周末干了一件非常有意思的事情,我们开发了一个用 Go 编写的命令行游戏,最近我正在重写一款曾经在年轻时开发的游戏,当时用的还是 Kaypro II。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/Using-C-Dynamic-Libraries-In-Go-Programs/kayproii.jpg) 我钟爱这台电脑,回想起曾经使用 BASIC 在上面日日夜夜开发游戏,它非常...

  • Go 中的可变参函数

    当函数最后一个参数为 *...T* 时(*T* 前面的三个点是特意的),就叫*可变参函数*: ```go package main import "fmt" func sum(numbers ...float64) (res float64) { for _, number := range numbers { res += number } return } func main() { fmt.Println(sum(1...

  • 使用 JWT 保护 API 访问

    APIs 的一个常见用例是提供一个授权中间件,允许客户端向 APIs 发送授权请求。通常来说,客户端会执行一些授权逻辑,产生一个「会话标识」。最近比较流行的 JWT ( JSON Web Tokens ) 提供了一个带超时时间的「会话标识」,使用它不需要额外的空间来执行验证逻辑。 本文是接着上一篇文章写的,在阅读下面内容之前建议先看一下之前的那篇文章 [用 go-chi 处理 HTTP 请求](https://scene-si.org/2018/03/12/handling-http-re...

  • 120
    图解 Go 并发编程

    你很可能从某种途径听说过 Go 语言。它越来越受欢迎,并且有充分的理由可以证明。 Go 快速、简单,有强大的社区支持。学习这门语言最令人兴奋的一点是它的并发模型。 Go 的并发原语使创建多线程并发程序变得简单而有趣。我将通过插图介绍 Go 的并发原语,希望能点透相关概念以方便后续学习。本文是写给 Go 语言编程新手以及准备开始学习 Go 并发原语 (goroutines 和 channels) 的同学。 ## 单线程程序 vs. 多线程程序 你可能已经写过一些单线程程序。一个常用的编...

  • 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 中的 init 函数

    main 标识符是随处可见的,每一个 Go 程序都是从一个叫 main 的包中的 main 函数开始的,当 main 函数返回时,程序执行结束。 init 函数也扮演着特殊的角色,接下来我们将描述下 init 函数的属性并介绍下怎么使用它们。 init 函数在包级别被定义,主要用于: - 初始化那些不能被初始化表达式完成初始化的变量 - 检查或者修复程序的状态 - 注册 - 仅执行一次的计算 - 更多其它场合 除了下面将要讨论到的一些差异外,你还可以在正则函数中放置任何...

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

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

  • 在 Go 中用 Context 取消操作

    许多使用 Go 的人都会遇到 context 包。大多数时候 context 用在下游操作, 比如发送 Http 请求、查询数据库、或者开 go-routines 执行异步操作。最普通用法是通过它向下游操作传递数据。很少人知道,但是非常有用的context功能是在执行中取消或者停止操作。 这篇文章会解释我们如何使用 Context 的取消功能,还有通过一些 Context 使用方法和最佳实践让你的应用更加快速和健壮。 ## 我们为什么需要取消操作? 简单来说,我们需要取消来避免...

  • Go 语言的 append 不总是线程安全的

    ## 示例问题 我经常看到一些 bug 是由于没有在线程安全下在 slice 上进行 append 而引起的。下面用单元测试来举一个简单的例子。这个测试有两个协程对相同的 slice 进行 append 操作。如果你使用 `-race` flag 来执行这个单元测试,效果更好。 ```go package main import ( "sync" "testing" ) func TestAppend(t *testing.T) { x := []stri...

  • 为什么 Go 语言允许百万级别的 goroutines,而 Java 只允许数千级别的 threads?

    原文链接:[https://rcoh.me/posts/why-you-can-have-a-million-go-routines-but-only-1000-java-threads/ ](https://rcoh.me/posts/why-you-can-have-a-million-go-routines-but-only-1000-java-threads/) 很多有过 JVM 相关语言工作经验的程序员或许都遇到过如下问题: ``` [error] (run-main-...

  • 关于 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...