当前位置: 首页 > wzjs >正文

漯河网站建设哪家厦门450元网站建设公司

漯河网站建设哪家,厦门450元网站建设公司,网站屏蔽国内ip,佛山优化网站方法简介 java同事都知道,线程会有对应的id,那么go语言中协程有id吗,其实是有的,但是不建议使用。 实在需要使用的话可以使用本文的例子获取 stack 我们先看一下runtime.Stack打印出来的栈结构,其中就包括了协程id fu…

简介

java同事都知道,线程会有对应的id,那么go语言中协程有id吗,其实是有的,但是不建议使用。

实在需要使用的话可以使用本文的例子获取

stack

我们先看一下runtime.Stack打印出来的栈结构,其中就包括了协程id

func main() {b := make([]byte, 64)b = b[:runtime.Stack(b, false)]fmt.Println(string(b))
}goroutine 1 [running]:
main.main()/Users/shura/GolandProject

通过上面可以看出 1 就是需要的协程id

获取协程id

根据以上的结构,我们就可以截取到协程id

func main() {fmt.Println(GoID())
}func GoID() 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
}输出 1

优化

上面方式虽然确实可以获取到协程id,但是每次都需要做一系列的操作,理论上标准库应该直接提供获取id的方法,但是没提供,那我们自己能不能从源码层面提供呢

我们跟踪runtime.Stack方法进入源码可以看到协程的信息是由 gp := getg()获取到的

再进入getg()查看是一个g的结构体

type g struct {goid         int64
}

这里面就有一个关键的属性goid,但是由于是私有的我们获取不到,所以我们只能从源码层面去添加获取协程id的方法

找到该go文件的路径,例如/Users/shura/support/go/go/src/runtime,执行如下脚本

cat > /Users/shura/support/go/go/src/runtime/shura_goid.go << EOF
package runtimefunc GoID() int64{return getg().goid
}
EOF

测试

func main() {fmt.Println(runtime.GoID())fmt.Println(GoID())
}输出1
1

欢迎关注,学习不迷路!

http://www.dtcms.com/wzjs/827292.html

相关文章:

  • wap网站部署北京做手机网站
  • 咸阳做网站公司中国建设银行官网站黄金部王毅
  • 微商城建设购物网站网站优化过度的表现
  • 解释自己做的网站会计实帐培训
  • cdn如何做网站备案阿里巴巴司法拍卖网官网
  • 湘潭培训网站建设网站文章更新怎么做
  • 鞍山网站制作小程序如何做网站店铺的模板
  • 网站推广网wordpress去掉导航栏
  • wordpress vue网站齐全的赣州网站建设
  • 成都网站外包公司十年经验网站开发公司
  • 湖北网络营销网站青岛外贸网站
  • seo视频网页入口网站推广正规十大电商平台
  • 缙云县建设局网站东莞做网站排名
  • 营销型电子商务网站11号在线 网站开发
  • 织梦网站被做跳转免费发布招聘信息平台
  • 制作自己的网站c网站开发视频教程
  • 做百度推广和企业网站那个有效果吗合肥房产网365
  • 网站建设和系统集成做网站跟推广哪家公司好
  • 球场 技术支持 东莞网站建设贵阳网页设计培训
  • 网站建设如何传视频一个网站两个域名吗
  • 做企业门户网站要准备哪些内容wordpress 插件 kf5
  • 购买腾讯云主机可以直接做网站中国东方营销网站
  • 帝国cms搭建个人网站建筑设计公司英文
  • 网站死链接扫描PPT做音乐网站介绍
  • 墨刀怎么做网站用家庭宽带做网站
  • 字画网站模板后台管理网站模板
  • 查看网站是否被kps个人网站建设
  • 厦门网站建设工程海城 网站建设
  • 舟山外贸营销网站建站网页qq官网登录入口
  • 图书馆网站建设总结网站首页大小