Go to file
liruichen_wsl e780c3f2ed
All checks were successful
Build Release / release linux/amd64 (release) Successful in 1m51s
Build Release / release linux/386 (release) Successful in 1m20s
Build Release / release darwin/amd64 (release) Successful in 59s
Build Release / release windows/amd64 (release) Successful in 1m4s
rm: test workflow
2024-11-19 16:24:36 +08:00
.github/workflows rm: test workflow 2024-11-19 16:24:36 +08:00
cmd merge: qiniu 2024-11-19 12:34:49 +08:00
doc/design rename design doc 2022-02-22 10:13:36 +08:00
hack refactor: go module name 2024-11-19 11:32:10 +08:00
pkg merge: qiniu 2024-11-19 12:34:49 +08:00
tests feat: shadow test workflow 2023-09-07 16:57:22 +08:00
.gitignore refactor: go module name 2024-11-19 11:32:10 +08:00
go.mod refactor: go module name 2024-11-19 11:32:10 +08:00
go.sum feat: only inject cmd 2024-09-05 15:10:18 +08:00
LICENSE update copyright with qiniu.com url 2020-05-26 00:21:54 +08:00
main.go refactor: go module name 2024-11-19 11:32:10 +08:00
Makefile add e2e test & ci 2021-07-22 19:57:56 +08:00
OWNERS init the directory structure and create OWNERS file (#2) 2020-05-09 15:34:47 +08:00
README.md fix: watch endpoint path (#261) 2022-02-14 10:20:41 +08:00

goc

goc v2 版本开发中

Quick Start

编译要求

Go 1.16+

新特性一览

1. 只支持 go module 工程

考虑到 GOPATH 已被官方明确将淘汰,以及支持 GOPATH 工程带来的巨大工作量v2 不再支持 GOPATH 工程。

2. 命令行 flag 解析优化

在 v1 版本中,go build -o -ldflags 'foo=bar' ./app/main.go 与 goc 命令并不等价,首先你需要切换到 .app/ 目录中,然后执行 goc build --buildflags="-o -ldflags 'foo=bar' ."。这个转换给使用者带来不小的负担,特别是 '" 混杂在一起时,感觉会更难受。

在 v2 版本中goc 编译命令和 go 编译命令已经极为相似,例如

go build -o -ldflags 'foo=bar' ./app/main.go
# 等价于
goc build -o -ldflags 'foo=bar' ./app/main.go
#
go build -o -ldflags 'foo=bar' ./app
# 等价于
goc build -o -ldflags 'foo=bar' ./app
#
go install ./app/...
# 等价于
goc install ./app/...
#

由于 go 命令对 flags 和 args 的相对位置有着严格要求:go build [-o output] [build flags] [packages],所以 goc 命令中 [build flags] 的位置也类似。而 goc 自己的 flags 则相对灵活:

goc build -o -ldflags 'foo=bar' ./app --gocdebug --gochost "127.0.0.1:7779" 

goc build --gocdebug -o -ldflags 'foo=bar' ./app --gochost "127.0.0.1:7779" 

两者都对。如果不想最小化的改动 go 编译命令,那么 --gochost 可以不指定,在服务启动时指定坏境变量就能动态改变注册中心地址:

export GOC_CUSTOM_HOST="127.0.0.1:7779"
./agent

3. 日志优化

带颜色日志,以及长时间操作时(例如 build, copy会有转圈动画。

4. 被测服务部署优化

在 v1 版本中,当被测服务在 docker 中goc server 在外部时,会要求在容器启动时额外开启端口转发,并且编译还需带额外参数。这给部署带来不便。

在 v2 版本中,不再有这一限制,只需要 goc server 能够被被测服务访问即可。

5. watch 模式

当使用 goc build --gocmode watch . 编译后,被测服务任何覆盖率变化都将实时推送到 goc server。

用户可以使用该 websocket 连接 ws://[goc_server_host]/v2/cover/ws/watch 观察到被测服务的新触发代码块,推送信息格式如下:

qiniu.com/kodo/apiserver/server/main.go:42.49,43.13 1 0
#
# importpath/filename.go:Line0.Col1,Line1,Col1 1 0

除此之外,原来的全局整体覆盖率可正常获取,不受影响。

6. 跨平台支持

  1. 支持 Linux/Macos/Windows
  2. 支持 go 的交叉编译