Project Organization and Style
Package Names
Go package names are short, lowercase identifiers that make selectors read naturally.
package naming
Good package names avoid stutter and casing surprises at call sites.
Package Names
package_names.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func isLowerIdentifier(name string) bool {
if name == "" {
return false
}
for _, ch := range name {
if ch < 'a' || ch > 'z' {
return false
}
}
return true
}
func main() {
var packageName = "cache"
lowercase := isLowerIdentifier(packageName)
selector := packageName + ".Store"
style := "review"
if lowercase {
style = "ok"
}
fmt.Println("package=", packageName)
fmt.Println("selector=", selector)
fmt.Println("lowercase=", lowercase)
fmt.Println("style=", style)
}
package main
import "fmt"
func isLowerIdentifier(name string) bool {
if name == "" {
return false
}
for _, ch := range name {
if ch < 'a' || ch > 'z' {
return false
}
}
return true
}
func main() {
var packageName = "CacheStore"
lowercase := isLowerIdentifier(packageName)
selector := packageName + ".Store"
style := "review"
if lowercase {
style = "ok"
}
fmt.Println("package=", packageName)
fmt.Println("selector=", selector)
fmt.Println("lowercase=", lowercase)
fmt.Println("style=", style)
}
package main
import "fmt"
func isLowerIdentifier(name string) bool {
if name == "" {
return false
}
for _, ch := range name {
if ch < 'a' || ch > 'z' {
return false
}
}
return true
}
func main() {
var packageName = "cacheutil"
lowercase := isLowerIdentifier(packageName)
selector := packageName + ".Store"
style := "review"
if lowercase {
style = "ok"
}
fmt.Println("package=", packageName)
fmt.Println("selector=", selector)
fmt.Println("lowercase=", lowercase)
fmt.Println("style=", style)
}
packageName ← "cache"
17func main() {18 var packageName→ "cache" = "cache" //@packageName="CacheStore", "cacheutil"19 lowercase := isLowerIdentifier(packageName"cache")20 selector := packageName + ".Store"func isLowerIdentifier(name string) bool
5func isLowerIdentifier(name"cache" string) bool {6 if name == "" {for _, ch := range name
pass 1 of 58}9for _, ch99 := range name"cache" {10 if ch < 'a' || ch > 'z' {All 5 passes — pass 1 is the card above pass ch1 99 2 97 3 99 4 104 5 101 return true
13 }14 return true15}lowercase ← true, selector ← "cache.Store", style ← "review"
18var packageName = "cache" //@packageName="CacheStore", "cacheutil"19lowercase→ true := isLowerIdentifier(packageName"cache")20selector→ "cache.Store" := packageName"cache" + ".Store"21style→ "review" := "review"22if lowercase {style ← "ok"
21style := "review"22if lowercasetrue {23 style→ "ok" = "ok"24}fmt.Println("package=", packageName)
26 fmt.Println("package=", packageName"cache")27 fmt.Println("selector=", selector"cache.Store")28 fmt.Println("lowercase=", lowercasetrue)29 fmt.Println("style=", style"ok")30}outputpackage= cache selector= cache.Store lowercase= true style= ok
packageName ← "CacheStore"
17func main() {18 var packageName→ "CacheStore" = "CacheStore"19 lowercase := isLowerIdentifier(packageName"CacheStore")20 selector := packageName + ".Store"func isLowerIdentifier(name string) bool
5func isLowerIdentifier(name"CacheStore" string) bool {6 if name == "" {for _, ch := range name
8}9for _, ch67 := range name"CacheStore" {10 if ch < 'a' || ch > 'z' {if ch < 'a' || ch > 'z'
9for _, ch := range name {10 if ch67 < 'a' || ch > 'z' {11 return false12 }lowercase ← false, selector ← "CacheStore.Store", style ← "review"
18 var packageName = "CacheStore"19 lowercase→ false := isLowerIdentifier(packageName"CacheStore")20 selector→ "CacheStore.Store" := packageName"CacheStore" + ".Store"21 style→ "review" := "review"22 if lowercase {23 style = "ok"24 }2526 fmt.Println("package=", packageName"CacheStore")27 fmt.Println("selector=", selector"CacheStore.Store")28 fmt.Println("lowercase=", lowercasefalse)29 fmt.Println("style=", style"review")30}outputpackage= CacheStore selector= CacheStore.Store lowercase= false style= review
packageName ← "cacheutil"
17func main() {18 var packageName→ "cacheutil" = "cacheutil"19 lowercase := isLowerIdentifier(packageName"cacheutil")20 selector := packageName + ".Store"func isLowerIdentifier(name string) bool
5func isLowerIdentifier(name"cacheutil" string) bool {6 if name == "" {for _, ch := range name
pass 1 of 98}9for _, ch99 := range name"cacheutil" {10 if ch < 'a' || ch > 'z' {All 9 passes — pass 1 is the card above pass ch1 99 2 97 3 99 4 104 5 101 6 117 7 116 8 105 9 108 return true
13 }14 return true15}lowercase ← true, selector ← "cacheutil.Store", style ← "review"
18var packageName = "cacheutil"19lowercase→ true := isLowerIdentifier(packageName"cacheutil")20selector→ "cacheutil.Store" := packageName"cacheutil" + ".Store"21style→ "review" := "review"22if lowercase {style ← "ok"
21style := "review"22if lowercasetrue {23 style→ "ok" = "ok"24}fmt.Println("package=", packageName)
26 fmt.Println("package=", packageName"cacheutil")27 fmt.Println("selector=", selector"cacheutil.Store")28 fmt.Println("lowercase=", lowercasetrue)29 fmt.Println("style=", style"ok")30}outputpackage= cacheutil selector= cacheutil.Store lowercase= true style= ok