go cover不能生成可编译的打桩代码
LeonSu070 opened this issue · comments
执行goc cover生成打桩代码
执行命令:
goc cover
生成了cover.go和http_cover_apis_auto_generated.go
.
├── cover.go
├── go.mod
├── http_cover_apis_auto_generated.go
└── main.go
运行打好桩的代码报错
go run .
cover.go:1:9: expected 'IDENT', found '.'
http_cover_apis_auto_generated.go:24:2: .: cannot import current directory
生成的代码:
cover.go
package .
var GoCover_0_623462353261316139306530 = struct {
Count [29]uint32
Pos [3 * 29]uint32
NumStmt [29]uint16
} {
Pos: [3 * 29]uint32{
30, 48, 0x21000d, // [0]
52, 65, 0xc0002, // [1]
80, 82, 0x4f0002, // [2]
86, 87, 0x220002, // [3]
48, 50, 0x30021, // [4]
65, 74, 0x2e000c, // [5]
77, 77, 0xe0003, // [6]
74, 76, 0x4002e, // [7]
82, 84, 0x3004f, // [8]
90, 91, 0x47001b, // [9]
91, 92, 0x180047, // [10]
96, 99, 0x230003, // [11]
92, 95, 0x40018, // [12]
103, 104, 0x47001d, // [13]
104, 105, 0x260047, // [14]
109, 109, 0x2f0003, // [15]
105, 108, 0x40026, // [16]
113, 114, 0x2e0042, // [17]
114, 115, 0x48002e, // [18]
115, 116, 0x110048, // [19]
123, 123, 0x180004, // [20]
116, 118, 0xc0011, // [21]
121, 121, 0x510005, // [22]
118, 120, 0x6000c, // [23]
128, 129, 0x2e004b, // [24]
129, 130, 0x48002e, // [25]
130, 132, 0x170048, // [26]
135, 137, 0x290004, // [27]
132, 134, 0x50017, // [28]
},
NumStmt: [29]uint16{
13, // 0
5, // 1
3, // 2
2, // 3
1, // 4
7, // 5
1, // 6
1, // 7
1, // 8
1, // 9
1, // 10
4, // 11
2, // 12
1, // 13
1, // 14
1, // 15
2, // 16
1, // 17
1, // 18
1, // 19
1, // 20
2, // 21
1, // 22
1, // 23
1, // 24
1, // 25
2, // 26
3, // 27
1, // 28
},
}
http_cover_apis_auto_generated.go
// Code generated by goc system. DO NOT EDIT.
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
_log "log"
"net"
"net/http"
"os"
"os/signal"
"path/filepath"
"strings"
"sync/atomic"
"syscall"
"testing"
_cover "."
)
func init() {
go registerHandlersGoc()
}
func loadValuesGoc() (map[string][]uint32, map[string][]testing.CoverBlock) {
var (
coverCounters = make(map[string][]uint32)
coverBlocks = make(map[string][]testing.CoverBlock)
)
...
main.go
//line /Users/leonsulicun/LeonDisk/chopeGit/test/simple-go-server/main.go:1
package main; import . "."
import (
"context"
"flag"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"sync/atomic"
"time"
)
type key int
const (
requestIDKey key = 0
)
var (
Version string = ""
GitTag string = ""
GitCommit string = ""
GitTreeState string = ""
listenAddr string
healthy int32
)
func main() {GoCover_0_623462353261316139306530.Count[0]++;
flag.StringVar(&listenAddr, "listen-addr", ":5001", "server listen address")
flag.Parse()
...
go.mod
module simple-server
go 1.20
hi @LeonSu070 , The goc cover
function was initially created as an internal tool to aid in testing during the early stages of development. However, it is now considered deprecated and should not be utilized.
For experiencing the desired feature, I recommend using the goc build
command. This will provide a suitable alternative to meet your testing requirements.
Hi @CarlJi , Thanks for your response!
Actually, we are running our service on AWS Lambda. That means we use AWS sam build
to build our service. That's why i need to run goc cover
to generate the source code first, then run sam build
to deploy our service to Lambda.
I changed the generated source code manually like the following steps, it can be built by sam build
. If you can update goc cover to reduce the manual work that would be great.
- move cover.go to a folder cover, and rename the package name from "." to "cover"
- import "simple-server/cover" in main.go and http_cover_apis_auto_generated.go
- change the counter var from GoCover_0_xxxxxxxxxxxxxxxxxxxx to cover.GoCover_0_xxxxxxxxxxxxxxxxxxxx in main.go
//line /Users/leonsulicun/LeonDisk/chopeGit/test/simple-go-server/main.go:1
package main;
import (
"context"
"flag"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"sync/atomic"
"time"
"simple-server/cover"
)
type key int
const (
requestIDKey key = 0
)
var (
Version string = ""
GitTag string = ""
GitCommit string = ""
GitTreeState string = ""
listenAddr string
healthy int32
)
func main() {cover.GoCover_0_623462353261316139306530.Count[0]++;
flag.StringVar(&listenAddr, "listen-addr", ":5001", "server listen address")
flag.Parse()
logger := log.New(os.Stdout, "http: ", log.LstdFlags)
logger.Println("Simple go server")
logger.Println("Version:", Version)
logger.Println("GitTag:", GitTag)
logger.Println("GitCommit:", GitCommit)
logger.Println("GitTreeState:", GitTreeState)
logger.Println("Server is starting...")
router := http.NewServeMux()
router.Handle("/", index())
router.Handle("/healthz", healthz())
nextRequestID := func() string {cover.GoCover_0_623462353261316139306530.Count[4]++;
return fmt.Sprintf("%d", time.Now().UnixNano())
}
cover.GoCover_0_623462353261316139306530.Count[1]++;server := &http.Server{
Addr: listenAddr,
Handler: tracing(nextRequestID)(logging(logger)(router)),
ErrorLog: logger,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 15 * time.Second,
}
...
@LeonSu070 Certainly, let's add it to the backlog. Thank you!
Thanks!