A Comprehensive Coverage Testing System for The Go Programming Language
Go
873
357 commits
updated May 3, 2026
English | 简体中文
goc is a comprehensive coverage testing system for The Go Programming Language, especially for some complex scenarios, like system testing code coverage collection and accurate testing.
Enjoy, Have Fun!

# Mac/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-darwin-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/386
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-386.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
Goc supports both GOPATH project and Go Modules project with Go 1.11+. However, for developing goc, you need to install Go 1.13+.
You can use goc tool in many scenarios.
Goc can collect code coverages at runtime for your long-run golang applications. To do that, normally just need three steps:
goc server to start a service registry center:
➜ simple-go-server git:(master) ✗ goc server
goc build to build the target service, and run the generated binary. Here let's take the simple-go-server project as example:
➜ simple-go-server git:(master) ✗ goc build .
... // omit logs
➜ simple-go-server git:(master) ✗ ./simple-go-server
goc profile to get the code coverage profile of the started simple server above:
➜ simple-go-server git:(master) ✗ goc profile
mode: atomic
enricofoltran/simple-go-server/main.go:30.13,48.33 13 1
enricofoltran/simple-go-server/main.go:48.33,50.3 1 0
enricofoltran/simple-go-server/main.go:52.2,65.12 5 1
enricofoltran/simple-go-server/main.go:65.12,74.46 7 1
enricofoltran/simple-go-server/main.go:74.46,76.4 1 0
...
PS:
enricofoltran/simple-go-server/main.go:30.13,48.33 13 1
File: enricofoltran/simple-go-server/main.go
Position of first point of this code block: 30.13
Position of second point of this code block: 48.33
Number of statements of this code block: 13
Number of executions of this code block: 1
We provide a vscode extension - Goc Coverage which can show highlighted covered source code at runtime.

To understand the execution details of goc tool, you can use the --debug flag. Also we appreciate if you can provide such logs when submitting a bug to us.
By default, the covered service will listen a random port in order to communicate with the goc server. This may not be suitable in docker or kubernetes environment since the port must be exposed explicitly in order to be accessible by others in such environment. For this kind of scenario, you can use --agentport flag to specify a fixed port when calling goc build or goc install.
To use a remote goc server, you can use --center flag to compile the target service with goc build or goc install command.
The coverage data is stored on each covered service side, so if one service needs to restart during test, this service's coverage data will be lost. For this case, you can use following steps to handle:
goc profile -o a.covgoc profile -o b.covgoc merge a.cov b.cov -o merge.covBy default, goc will use the artifact's file name as its service name. You can overwrite it by setting environment variable GOC_SERVICE_NAME. (See #293 for details)
We welcome all kinds of contribution, including bug reports, feature requests, documentation improvements, UI refinements, etc.
Thanks to all contributors!!
Goc is released under the Apache 2.0 license. See LICENSE.txt
Overall
Maintained
Code review
Go module
Latest release
Releases this year
3,291 followers · starred Jun 2020
669 followers · starred Oct 2020
245 followers · starred Aug 2023
32 followers · starred Sep 2021
A Comprehensive Coverage Testing System for The Go Programming Language
Go
873
357 commits
updated May 3, 2026
English | 简体中文
goc is a comprehensive coverage testing system for The Go Programming Language, especially for some complex scenarios, like system testing code coverage collection and accurate testing.
Enjoy, Have Fun!

# Mac/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-darwin-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/AMD64
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
# Linux/386
curl -s https://api.github.com/repos/qiniu/goc/releases/latest | grep "browser_download_url.*-linux-386.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
Goc supports both GOPATH project and Go Modules project with Go 1.11+. However, for developing goc, you need to install Go 1.13+.
You can use goc tool in many scenarios.
Goc can collect code coverages at runtime for your long-run golang applications. To do that, normally just need three steps:
goc server to start a service registry center:
➜ simple-go-server git:(master) ✗ goc server
goc build to build the target service, and run the generated binary. Here let's take the simple-go-server project as example:
➜ simple-go-server git:(master) ✗ goc build .
... // omit logs
➜ simple-go-server git:(master) ✗ ./simple-go-server
goc profile to get the code coverage profile of the started simple server above:
➜ simple-go-server git:(master) ✗ goc profile
mode: atomic
enricofoltran/simple-go-server/main.go:30.13,48.33 13 1
enricofoltran/simple-go-server/main.go:48.33,50.3 1 0
enricofoltran/simple-go-server/main.go:52.2,65.12 5 1
enricofoltran/simple-go-server/main.go:65.12,74.46 7 1
enricofoltran/simple-go-server/main.go:74.46,76.4 1 0
...
PS:
enricofoltran/simple-go-server/main.go:30.13,48.33 13 1
File: enricofoltran/simple-go-server/main.go
Position of first point of this code block: 30.13
Position of second point of this code block: 48.33
Number of statements of this code block: 13
Number of executions of this code block: 1
We provide a vscode extension - Goc Coverage which can show highlighted covered source code at runtime.

To understand the execution details of goc tool, you can use the --debug flag. Also we appreciate if you can provide such logs when submitting a bug to us.
By default, the covered service will listen a random port in order to communicate with the goc server. This may not be suitable in docker or kubernetes environment since the port must be exposed explicitly in order to be accessible by others in such environment. For this kind of scenario, you can use --agentport flag to specify a fixed port when calling goc build or goc install.
To use a remote goc server, you can use --center flag to compile the target service with goc build or goc install command.
The coverage data is stored on each covered service side, so if one service needs to restart during test, this service's coverage data will be lost. For this case, you can use following steps to handle:
goc profile -o a.covgoc profile -o b.covgoc merge a.cov b.cov -o merge.covBy default, goc will use the artifact's file name as its service name. You can overwrite it by setting environment variable GOC_SERVICE_NAME. (See #293 for details)
We welcome all kinds of contribution, including bug reports, feature requests, documentation improvements, UI refinements, etc.
Thanks to all contributors!!
Goc is released under the Apache 2.0 license. See LICENSE.txt
Overall
Maintained
Code review
Go module
Latest release
Releases this year
3,291 followers · starred Jun 2020
669 followers · starred Oct 2020
245 followers · starred Aug 2023
32 followers · starred Sep 2021