ปัญหาที่พบเจอ
เมื่อทำการทดสอบ และสร้าง coverage report ออกมาด้วยคำสั่ง

$go test -coverprofile=cover.out
$go tool cover -html=cover.out -o coverage.html

จะเกิดปัญหาประมาณนี้

cover: can't find "api.go": cannot find package "_/Users/somkiat/data/slide/golang/poc/" in any of:
    /usr/local/Cellar/go/1.8.3/libexec/src/_/Users/somkiat/data/slide/golang/poc (from $GOROOT)
    /Users/somkiat/go/src/_/Users/somkiat/data/slide/golang/poc (from $GOPATH)

ทำให้ไม่สามารถสร้างรายงานของ code coverage ในรูปแบบ HTML ได้
ดังนั้นเรามาแก้ไขปัญหากันหน่อย

เมื่อไปดูใน issue list ของ Golang พบว่า

มี issue 17269 ชื่อว่า cmd/cover: cannot find package in local directory outside GOPATH
ซึ่งเป็นปัญหาตั้งแต่ Golang 1.7.1 แล้ว
ตอนนี้ลองทดสอบบน Golang 1.9 beta 2 ก็ยังเกิดปัญหาอยู่
เพราะว่า issue ยังอยู่ในสถานะ open !!
แต่จากที่อ่านเห็นว่าจะแก้ไขใน version 1.9 และ 1.10 นะ

ปัญหาหลัก ๆ คือ หาไฟล์ใน project ของเราไม่เจอนั่นเอง

นั่นคือ ปัญหาเกิดจากการเข้าไปอ่านข้อมูลของ code coverage จากไฟล์ cover.out
มีข้อมูลดังนี้

mode: set
_/Users/somkiat/data/slide/golang/poc/api.go:13.53,16.2 1 0
_/Users/somkiat/data/slide/golang/poc/api.go:18.37,20.18 2 1
_/Users/somkiat/data/slide/golang/poc/api.go:23.2,23.10 1 1
_/Users/somkiat/data/slide/golang/poc/api.go:20.18,22.3 1 1
_/Users/somkiat/data/slide/golang/poc/api.go:26.13,29.2 2 0

ปัญหาที่เกิดคือ ไม่เข้าใจ _/Users/somkiat/data/slide/golang/poc/
จะไปแก้ไข code ที่ cmd/cover tool ก็ดูลำบาก

ดังนั้นเรามาแก้ไขปัญหาเฉพาะหน้ากันก่อนดีกว่า

ด้วยการแก้ไขข้อมูลในไฟล์ cover.out ดังนี้

mode: set
./api.go:13.53,16.2 1 0
./api.go:18.37,20.18 2 1
./api.go:23.2,23.10 1 1
./api.go:20.18,22.3 1 1
./api.go:26.13,29.2 2 0

ก็สามารถสร้างไฟล์ HTML ออกมาได้ดังนี้

แต่ถ้าต้องมาแก้ไขเองด้วยมือตลอด คงไม่ดีแน่ ๆ

ดังนั้นก็เขียน script มาใช้งานนิดหน่อย
ตามนิสัยคนขี้เกียจดังนี้

go test -coverprofile=cover.out
sed -i.bak 's/_\/Users\/somkiat\/data\/slide\/golang\/poc/./g' cover.out
go tool cover -html=cover.out -o coverage.html

เพียงเท่านี้ก็พอไปวัดไปวาได้บ้างแล้ว
ขอให้สนุกกับการ coding ครับ