-
一个好的 Go 语言 Makefile 是怎样的
精简的 Makefile,用于简化构建和管理用 Go 编写的 Web 服务器。  我偶然调整我的 Makefiles 来加快我的开发过程,一天早上有点时间,我决定与大家分享其中诀窍。 总而言之,我使用 Go 构建 Web 服务器,我对 Makefile 的...
-
Go 语言的 append 不总是线程安全的
## 示例问题 我经常看到一些 bug 是由于没有在线程安全下在 slice 上进行 append 而引起的。下面用单元测试来举一个简单的例子。这个测试有两个协程对相同的 slice 进行 append 操作。如果你使用 `-race` flag 来执行这个单元测试,效果更好。 ```go package main import ( "sync" "testing" ) func TestAppend(t *testing.T) { x := []stri...
-
120
关于结构化并发的笔记 —— Go 语言中有害的声明语句
## 前言 每一个并发的 API 背后的代码都需要允许并发运行的,以下是使用不同 API 的例子: ``` go myfunc(); // Golang pthread_create(&thread_id, NULL, &myfunc); /* C with POSIX threads */ spawn(modulename, myfuncname, []) % Erlang th...
-
Go 实验报告:函数式编程之泛型
在 2017 年的年中,我在 GopherCon 上发表了《Go 的函数式编程》的演讲。我提出了一些函数式编程的概念,Gophers 使用它,可以提高编程效率,代码更加简洁。  ...
-
Go 语言中 append 导致内存不足
这是一篇简短的笔记,关于你或许会遇上的 Go 语言的内存不足的问题。 如你所知,Go 语言的 slice 很强大且使用简单。通过 Go 语言的内置函数,它可以解决我们许多问题。 但是今天,我更多想讲述的是 slice 与它的内存。 首先,创建 slice 最简单的方式是: ```go var sliceOfInt []int var sliceOfString []int var sliceOfUser []User var sliceOfMap []map[st...
-
剖析与优化 Go 的 web 应用
Go 语言有一个很强大的内置分析器(profiler),支持CPU、内存、协程 与 阻塞/抢占(block/contention)的分析。 ## 开启分析器(profiler) Go 提供了一个低级的分析 API [runtime/pprof](https://golang.org/pkg/runtime/pprof/) ,但如果你在开发一个长期运行的服务,使用更高级的 [net/http/pprof](https://golang.org/pkg/net/http/pprof/) ...
-
你的 pprof 暴露了
IPv4 扫描暴露出的 `net/http/pprof` 端点(endpoint) 原文发表日期: 2017年9月27日 Go语言的 [net/http/pprof](https://golang.org/pkg/net/http/pprof/) 包是令人难以置信的强大的,调试正在运行的生产服务器的这个功能微不足道,而在这个调试过程,就很容易不经意间将调试信息暴露给世界。在这篇文章中,我们用 [zmap project](https://github.com/zmap) 作为例子,展示...