获取当前GoroutineID

344 阅读1分钟
package main

import (
	"fmt"
	"runtime"
	"strconv"
	"strings"
	"time"
)

func main() {
	go func() {
		id1, err := GetGoroutineID()
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(id1)
	}()

	go func() {
		id1, err := GetGoroutineID()
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(id1)
	}()
	time.Sleep(1 * time.Second)
        //18
        //19
}

func GetGoroutineID() (int, error) {
	var buf [64]byte
	n := runtime.Stack(buf[:], false)
	field := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0]
	return strconv.Atoi(field)
}