package main import ( "bytes" "fmt" "runtime" "strconv" "time" ) func main() { go func() { gid := GetGid() fmt.Printf("child goruntine1 gid:%v \\n",gid) }() go func() { gid := GetGid() fmt.Printf("child goruntine2 gid:%v \\n",gid) }() go func() { gid := GetGid() fmt.Printf("child goruntine3 gid:%v \\n",gid) }() go func() { gid := GetGid() fmt.Printf("child goruntine4 gid:%v \\n",gid) }() go func() { gid := GetGid() fmt.Printf("child goruntine5 gid:%v \\n",gid) }() gid := GetGid() fmt.Printf("main goruntine gid:%v \\n",gid) time.Sleep(time.Second) } func GetGid() (gid uint64) { b := make(\[\]byte, 64) b = b\[:runtime.Stack(b, false)\] b = bytes.TrimPrefix(b, \[\]byte("goroutine ")) b = b\[:bytes.IndexByte(b, ' ')\] n, err := strconv.ParseUint(string(b), 10, 64) if err != nil { panic(err) } return n }