首页 > 其他分享 >Go如何获取goroutineId

Go如何获取goroutineId

时间:2024-08-23 09:53:42浏览次数:5  
标签:goroutineId log goroutine 获取 goid func time Go main

runtime包

package main

import (
    "bytes"
    "log"
    "os"
    "runtime"
    "strconv"
    "time"
)

func getGoroutineID() uint64 {
    b := make([]byte, 64)
    b = b[:runtime.Stack(b, false)]
    b = bytes.TrimPrefix(b, []byte("goroutine "))
    b = b[:bytes.IndexByte(b, ' ')]
    n, _ := strconv.ParseUint(string(b), 10, 64)
    return n
}

func logWithGoroutineID(message string) {
    gid := getGoroutineID()
    log.Printf("goroutine[%d]: %s", gid, message)
}

func main() {
    // 设置日志输出格式
    log.SetFlags(0) // 禁用时间戳,保持输出简单
    log.SetOutput(os.Stdout)

    // 在不同的 goroutine 中打印日志
    go func() {
        logWithGoroutineID("goroutine 1")
    }()

    go func() {
        logWithGoroutineID("goroutine 2")
    }()

    // 主 goroutine
    logWithGoroutineID("main goroutine")

    // 防止程序过快退出
    time.Sleep(3 * time.Second)
}

三方包 github.com/petermattis/goid

package main

import (
    "fmt"
    "log"
    "os"
    "github.com/petermattis/goid"
)

func main() {
    // 设置日志输出格式
    log.SetFlags(0) // 禁用时间戳,保持输出简单
    log.SetOutput(os.Stdout)

    // 在不同的 goroutine 中打印日志
    go func() {
        log.Printf("goroutine[%d]: goroutine 1", goid.Get())
    }()

    go func() {
        log.Printf("goroutine[%d]:  goroutine 2", goid.Get())
    }()

    // 主 goroutine
    log.Printf("goroutine[%d]: main goroutine", goid.Get())

    // 防止程序过快退出
     time.Sleep(3 * time.Second)
}

其中main goroutine打印一直都是1,其余两个是动态变化的,并不确定,类似

标签:goroutineId,log,goroutine,获取,goid,func,time,Go,main
From: https://www.cnblogs.com/qcy-blog/p/18375350

相关文章

  • Go 使用gRPC协议操作RocketMQ 5.3
    docker-compose安装RocketMQdocker-compose.ymlversion:'3.8'services:namesrv:image:apache/rocketmq:5.3.0container_name:rmqnamesrvports:-9876:9876networks:-rocketmqcommand:shmqnamesrvbroker:i......
  • 在Spring Boot项目中集成Geth(Go Ethereum)
    在SpringBoot项目中集成Geth(GoEthereum)客户端,通常是为了与以太坊区块链进行交互。以下是一些基本的步骤和考虑因素,帮助你在SpringBoot应用程序中集成Geth。安装Geth首先,你需要在你的机器上安装Geth。你可以从官方网站下载适合你操作系统的版本。启动Geth安装完成后......
  • Study Plan For Algorithms - Part8
    1.三数之和题目链接:https://leetcode.cn/problems/3sum/给定一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。返回所有和为0且不重复的三元组。classSolution:deft......
  • CF163E e-Government 题解
    题目传送门前置知识AC自动机|树状数组解法一次性将所有模式串加入AC自动机,然后处理加入和删除,考虑单次操作对答案的贡献。因为模式串\(T\)在文本串\(S\)中出现的次数之和等价于\(T\)在\(S\)的所有前缀中作为后缀出现的次数之和。这就很和\(fail\)树上跳到根节......
  • Go语言基础
    基础使用//hello.go//packagedeclarationpackagemain//importpackageimport"fmt"//functionfuncadd(a,bint)int{returna+b}//globalvariablevargint=100funcmain(){a,b:=1,2res:=add(a,b)fmt.Println("a=&......
  • 织梦dedecms使用sql语句获取文章链接地址
    在织梦DeDeCMS中,可以通过SQL语句结合织梦特有的标签来获取文章链接地址。以下是如何使用SQL语句获取文章链接地址的具体步骤和示例。1.SQL语句织梦CMS允许在模板中使用自定义SQL语句来获取数据。这可以通过 {dede:sql} 标签来实现。2.获取文章链接地址SQL语句:编写SQL语句......
  • Kubernetes: client-go 源码剖析(一)
    kubernetes:client-go 系列文章:Kubernetes:client-go源码剖析(一)Kubernetes:client-go源码剖析(二)0.前言在看 kube-scheduler 组件的过程中遇到了 kube-scheduler 对于 client-go 的调用,泛泛的理解调用过程总有种隔靴搔痒的感觉,于是调转头先把 client-go 理清楚......
  • BanG Dream! It's MyGO!!!!!
    BanGDream!It'sMyGO!!!!!题目描述在“BanGDream!It'sMyGO!!!”的世界里,各个乐团的演出和排练场地像星星一样被连接在一起,形成了一张美丽的网络图。每个乐团都有自己独特的演出场地和练习室,这些地点通过各种路径互相连接,组成了一张复杂的图谱。koala作为一名热爱音乐的乐......
  • candence allego 差分信号设置
    一、设置差分对1、Logic→AssignDifferential;2、依次点击要建立差分对的走线,并在DiffPairname处给差分对命名。二、差分规则Setup→Constraint→ConstraintManager,进入线束约束管理器,在线束约束管理器界面,左侧有一个WorksheetSelector,在WorksheetSelector里选择Phys......
  • 【待做】【整理】敏感文件获取
    一、搜集敏感密码配置⽂件1.1dir命令搜集敏感密码配置⽂件⼀般配置⽂件或者密码⽂件都是:pass.*,config.*,username.*,password.*pwd查看当前工作目录使⽤dir命令来进⾏⽂件查找通过type命令进行查看1.2for循环搜集敏感密码配置⽂件通过for循环来查找匹配pass......