[返回] [最新] [最热门] [最高评价]

再谈谈获取 goroutine id 的方法

去年年初的时候曾经写过一篇关于如何获取goroutine id的方法: 如何得到goroutine 的 id?, 当时调研了一些一些获取goid的方法。基本的方法有三种:

通过Stack信息解析出ID

通过汇编获取runtime·getg方法的调用结果

直接修改运行时的代码,export一个可以外部调用的GoID()方法

每个方式都有些问题, #1比较慢, #2因为是hack的方式(Go
...

鸟窝 2017-09-05 08:58 | 查看: 818

常用配置文件格式

配置文件是工程中常用的初始化参数的配置方式,而配置文件的格式有很多种,不同的操作系统、编程语言都会有不同的配置文件的格式,本文罗列了一些常见的配置文件的格式。

不同的配置文件格式有不同的用户友好性, 对于功能的支持也有简单和复杂之分,很难简单说那种配置文件是最好的,有时候需要从多个方面去考虑, 比如Windows较早的开发喜欢使用int、java喜欢使用properties、通用的编程喜欢yam
...

鸟窝 2017-08-31 12:02 | 查看: 479

Go Plugin的一个bug

Go 1.8中增加了 plugin package,但是仅支持Linux操作系统,并且还有一些已知的bug。可以说,这个插件系统的实现还未达到"产品级"的水平。

The plugin support is currently incomplete, only supports Linux, and has known bugs.

一些已知的bug已经推到 Go1.10甚至以
...

鸟窝 2017-08-27 00:27 | 查看: 428

[转]设计一个容错的微服务架构

原文: Designing a Microservices Architecture for Failure
翻译: 设计一个容错的微服务架构 by Jason Geng

微服务架构使得可以通过明确定义的服务边界来隔离故障。但是像在每个分布式系统中一样,发生网络、硬件、应用级别的错误都是很常见的。由于服务依赖关系,任何组件可能暂时无法提供服务。为了尽量减少部分中断的影响,我们需要构建容错服务,来
...

鸟窝 2017-08-23 13:52 | 查看: 524

Go 1.9 sync.Map揭秘

在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。

本文带你深入到sync.Map的具体实现中,看看为了增加一个功能,代码是如何变的复杂的,以及作者在实现syn
...

鸟窝 2017-07-19 17:59 | 查看: 477

Mac OS X显示连接

Mac OSX中虽然带了 netstat工具,可是用起来不像Linux下那么爽, 一个是慢 (netstat -p tcp | grep $PORT),二是不能pid,所以stackoverflow上建议使用lsof工具。

所以你可以使用下面的命令:

1
2
3

lsof -n -i4TCP:$PORT | grep LISTEN # Verified on macOS Sierra
lso
...

鸟窝 2017-07-11 15:34 | 查看: 328

Go语言中 select 和 switch 的比较

select 和 switch 是 Go语言中进行分支操作的两个方式,各有各的应用场景。

select

select只能应用于channel的操作,既可以用于channel的数据接收,也可以用于channel的数据发送。

如果select的多个分支都满足条件,则会随机的选取其中一个满足条件的分支, 如语言规范中所说:

If multiple cases can proceed, a uni
...

鸟窝 2017-07-07 19:48 | 查看: 379

[转]golang concurrency tricks

原文地址: Golang Concurrency Tricks

Golang concurrency model based on goroutines and channels is not free from sharp edges.

This page intends both (1) to collect helpful guidelines for writing concurren
...

鸟窝 2017-07-07 19:27 | 查看: 378

[译]参考资料: 地道的GO代码

原文: Idiomatic Go

什么样的代码才算最地道的Go代码? 这个问题经常被人问起,但是确不太好回答。部分原因在于我们还在摸索之中,抑或Go还是一个年轻的语言。随着语言和社区的逐渐成熟,老司机们才会对地道的Go代码达成共识。

请注意,地道的代码不是限制你的规则,而是代码指导。工作正常的代码比地道的代码更重要。因为所谓的地道,只是大家达成的一种共识,所以"不地道"的的
...

鸟窝 2017-07-06 19:13 | 查看: 527

[译]使用os/exec执行命令

原文: Advanced command execution in Go with os/exec by Krzysztof Kowalczyk.
完整代码在作者的github上: advanced-exec

Go可以非常方便地执行外部程序,让我们开始探索之旅吧。

执行命令并获得输出结果

最简单的例子就是运行ls -lah并获得组合在一起的stdout/stderr输出。

1
2
3
4
...

鸟窝 2017-07-03 11:34 | 查看: 482

在Nginx内部自动处理3XX跳转

利用Nginx很容易的配置反向代理和负载均衡的服务, 比如下面的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

upstream backends {
server 10.0.0.10:8080;
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}

server{
lis
...

鸟窝 2017-06-30 15:31 | 查看: 371

了解 Go 1.9 的类型别名

如你所知, 类型别名(type aliases) 最终还是加入到Go 1.9中, Go 1.9 beta2今天已经发布了, 正式版预计8月初发布, 是时候深入了解一下它的新特性了,本文介绍的就是它的重要的新特性之一: 类型别名。

当然,如果你想尝试这些新特性,需要安装Go 1.9的版本,目前是beta2版,可以在官方网站下载。

类型别名主要解决什么问题,为什么需要这个特性? Russ Cox
...

鸟窝 2017-06-28 10:58 | 查看: 457

...更多...