enumizer
1.0.0
Enumizer เป็นเครื่องมือบรรทัดคำสั่งสำหรับ Golang ในการสร้างผู้ช่วย enum และตรวจสอบความครอบคลุมของ enum ในคำสั่งสวิตช์
$ go install github.com/neglect-yp/enumizer@latest
คุณต้องเพิ่มความคิดเห็นมาร์กเกอร์ก่อนที่จะลอง ดูส่วนตัว Examples
$ enumizer help
enumizer is a command-line tool to generate enum helpers and check enum coverage.
Usage:
enumizer [command]
Examples:
* Generate enum helpers
enumizer generate ./...
* Check enum coverage
enumizer cover ./...
Available Commands:
completion Generate the autocompletion script for the specified shell
cover Check that switch statements cover all variants of passed enum
generate Generate enum helpers that include stringer and validation methods
help Help about any command
Flags:
-h, --help help for enumizer
Use "enumizer [command] --help" for more information about a command.
เพิ่มความคิดเห็นของเครื่องหมายเช่น // enumizer:target เหนือบล็อก const ของคุณสำหรับตัวแปร enum
package myenum
type MyEnum int
// enumizer:target
const (
A MyEnum = iota
B
C
) จากนั้นคุณสามารถสร้างผู้ช่วย enum ด้วย enumizer generate ./... ชื่อไฟล์ที่สร้างขึ้นคือ enumizer.gen.go โดยค่าเริ่มต้น enumizer.gen.go มีดังนี้:
// Code generated by enumizer; DO NOT EDIT.
package myenum
import "fmt"
var myEnumSet = map [ MyEnum ] struct {}{
A : {},
B : {},
C : {},
}
func MyEnumList () [] MyEnum {
ret := make ([] MyEnum , 0 , len ( myEnumSet ))
for v := range myEnumSet {
ret = append ( ret , v )
}
return ret
}
func ( m MyEnum ) String () string {
switch m {
case A :
return "A"
case B :
return "B"
case C :
return "C"
default :
return "<unknown MyEnum>"
}
}
func ( m MyEnum ) IsValid () bool {
_ , ok := myEnumSet [ m ]
return ok
}
func ( m MyEnum ) Validate () error {
if ! m . IsValid () {
return fmt . Errorf ( "MyEnum(%v) is invalid" , m )
}
return nil
} และคุณสามารถตรวจสอบได้ว่าคำสั่งสวิตช์ครอบคลุมทุกรุ่นของ Enum ที่ผ่านมา หากคุณมีรหัสที่ใช้ MyEnum เช่นต่อไปนี้คุณจะได้รับการเตือนเนื่องจากไม่มีกรณี A และ C ในคำสั่ง Switch
package myenumuser
import "github.com/neglect-yp/enumizer/examples/myenum"
func Foo ( a myenum. MyEnum ) {
switch a {
case myenum . B :
}
}$ enumizer cover ./examples/...
/<path to homedir>/enumizer/examples/myenumuser/myenumuser.go:6:2: this switch statement doesn't cover enum variants. missing cases: A, C