cmd/cover: simplify and correct isValidIdentifier

Per comment on CL 120316.

Updates #25280

Change-Id: I7d078de4030bd10934468e04ff696a34749bd454
Reviewed-on: https://go-review.googlesource.com/c/153500
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/cover/cover.go b/src/cmd/cover/cover.go
index 7f473a2..425bcbd 100644
--- a/src/cmd/cover/cover.go
+++ b/src/cmd/cover/cover.go
@@ -118,7 +118,7 @@
 	}
 
 	if *varVar != "" && !isValidIdentifier(*varVar) {
-		return fmt.Errorf("argument of -var is not a valid identifier: %v", *varVar)
+		return fmt.Errorf("-var: %q is not a valid identifier", *varVar)
 	}
 
 	if *mode != "" {
@@ -683,12 +683,17 @@
 }
 
 func isValidIdentifier(ident string) bool {
-	first := true
-	for _, c := range ident {
-		if !unicode.IsLetter(c) && c != '_' && (first || !unicode.IsDigit(c)) {
-			return false // invalid identifier
+	if len(ident) == 0 {
+		return false
+	}
+	for i, c := range ident {
+		if i > 0 && unicode.IsDigit(c) {
+			continue
 		}
-		first = false
+		if c == '_' || unicode.IsLetter(c) {
+			continue
+		}
+		return false
 	}
 	return true
 }