【Go】资源竟态检测工具:race detetor

简介:

试了一下,简直牛逼。鉴于处于快速入门阶段,就不去挖底层原理了,等面铺开了再深入。

用一个有点并发经验的人都能看出来的例子,累加:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var count = 0
    // 使用WaitGroup等待10个goroutine完成
    var wg sync.WaitGroup
    wg.Add(10)
    for i := 0; i < 10; i++ {
        go func() {
            defer wg.Done()
            // 对变量count执行10次加1
            for j := 0; j < 10000; j++ {
                count++
            }
        }()
    }
    // 等待10个goroutine完成
    wg.Wait()
    fmt.Println(count)
}

不上锁时是这样的:

PS C:\Users\Administrator\Desktop\go> go build main.go
PS C:\Users\Administrator\Desktop\go> .\main.exe      
49376

接下来让我们看看 race detetor 的表现:

PS C:\Users\Administrator\Desktop\go> go build -race main.go
PS C:\Users\Administrator\Desktop\go> .\main.exe
==================
WARNING: DATA RACE
Read at 0x00c0000ac078 by goroutine 8:
  main.main.func1()
      C:/Users/Administrator/Desktop/go/main.go:18 +0xa8

Previous write at 0x00c0000ac078 by goroutine 7:
  main.main.func1()
      C:/Users/Administrator/Desktop/go/main.go:18 +0xba

Goroutine 8 (running) created at:
  main.main()
      C:/Users/Administrator/Desktop/go/main.go:14 +0x8d

Goroutine 7 (finished) created at:
  main.main()
      C:/Users/Administrator/Desktop/go/main.go:14 +0x8d
==================
48462
Found 1 data race(s)

懂得都懂,真正项目里的资源竟态隐藏的都很深,一爆出来那死伤是难以估量的。

相关文章
|
13天前
|
存储 Go 开发工具
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
go语言后端开发学习(二)——基于七牛云实现的资源上传模块
|
9月前
|
Linux Go 调度
Go 协程为什么比进程和线程占用的系统资源低?
Go 协程为什么比进程和线程占用的系统资源低?
44 0
|
8月前
|
Go 知识图谱
GO学习路线及资源分享
GO学习路线及资源分享
|
12月前
|
Go 知识图谱 Cloud Native
GO语言学习路线及资源分享 | GO主题月
go语言网站 如下为用到的资源网站,整理如下
GO语言学习路线及资源分享 | GO主题月
|
JSON 运维 Shell
使用go做一个https证书时间检测工具
使用go做一个https证书时间检测工具
165 0
|
存储 缓存 安全
Go Mutex:保护并发访问共享资源的利器
本文主要介绍了 Go 语言中互斥锁 Mutex 的概念、对应的字段和方法、基本使用和易错场景,最后基于 Mutex 实现一个简单的线程安全的缓存。
178 0
Go Mutex:保护并发访问共享资源的利器
|
Go 数据库 Windows
awesome-go:很全的go语言资源合集
awesome-go:一个很全的go语言框架,库,软件合集 前面发过关于awsone-python, awsone django, flask。
2394 0
|
Go
golang精华资源
我从几个月前用go学go算是入道了,看了大量的书,做了大量的例子,收藏了不少干货,在这里分享给大家,欢迎关注gostock微信公众号,持续更新:) 1.Learning Go 《学习Go语言》 http://www.miek.nl/projects/learninggo/ 中文版http://mikespook.com/learning-go/ 2.Go by Example
1508 0