获取goroutine的id? 官方不支持的!!

人家官方说了:

"This, among other reasons, to prevent programmers 
for simulating thread local storage using the goroutine id as a key. "

就为了避免咱们当成ThreadLocal的key!! 这是为了神马?为神马?!!

方法还是有的嘛,改动一下源码

神马?!改源码这么大件事?! 对的,但只是添加,不修改不覆盖,不影响其他功能

文件一, $GOPATH/src/pkg/runtime/runtime.c, 在最后面添加一个方法

void
runtime·GetGoId(int32 ret)
{
        ret = g->goid;
        USED(&ret);
}

文件二, $GOPATH/src/pkg/runtime/extern.go 在最后面导出这个方法

func GetGoId() int

然后,就是重新编译golang了

cd $GOROOT/src
./make.bash

好了,测试一下吧

写一个main.go

package main

import "fmt"
import "runtime"

func main() {
        fmt.Println("Id =", runtime.GetGoId())
}

编译并运行之

go run main.go

结果是

Id = 1

恩,暴力到此结束哦,保重啦各位…



blog comments powered by Disqus

Published

2013-02-05

Categories


Tags

Fork me on GitHub