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

packageName
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)
}
  1. packageName ← "cache"

    17func main() {18  var packageName→ "cache" = "cache" //@packageName="CacheStore", "cacheutil"19  lowercase := isLowerIdentifier(packageName"cache")20  selector := packageName + ".Store"
  2. func isLowerIdentifier(name string) bool

    5func isLowerIdentifier(name"cache" string) bool {6  if name == "" {
  3. for _, ch := range name

    pass 1 of 5
    8}9for _, ch99 := range name"cache" {10  if ch < 'a' || ch > 'z' {
    All 5 passes — pass 1 is the card above
    passch
    199
    297
    399
    4104
    5101
  4. return true

    13  }14  return true15}
  5. 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 {
  6. style ← "ok"

    21style := "review"22if lowercasetrue {23  style→ "ok" = "ok"24}
  7. 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
  1. packageName ← "CacheStore"

    17func main() {18  var packageName→ "CacheStore" = "CacheStore"19  lowercase := isLowerIdentifier(packageName"CacheStore")20  selector := packageName + ".Store"
  2. func isLowerIdentifier(name string) bool

    5func isLowerIdentifier(name"CacheStore" string) bool {6  if name == "" {
  3. for _, ch := range name

    8}9for _, ch67 := range name"CacheStore" {10  if ch < 'a' || ch > 'z' {
  4. if ch < 'a' || ch > 'z'

    9for _, ch := range name {10  if ch67 < 'a' || ch > 'z' {11    return false12  }
  5. 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
  1. packageName ← "cacheutil"

    17func main() {18  var packageName→ "cacheutil" = "cacheutil"19  lowercase := isLowerIdentifier(packageName"cacheutil")20  selector := packageName + ".Store"
  2. func isLowerIdentifier(name string) bool

    5func isLowerIdentifier(name"cacheutil" string) bool {6  if name == "" {
  3. for _, ch := range name

    pass 1 of 9
    8}9for _, ch99 := range name"cacheutil" {10  if ch < 'a' || ch > 'z' {
    All 9 passes — pass 1 is the card above
    passch
    199
    297
    399
    4104
    5101
    6117
    7116
    8105
    9108
  4. return true

    13  }14  return true15}
  5. 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 {
  6. style ← "ok"

    21style := "review"22if lowercasetrue {23  style→ "ok" = "ok"24}
  7. 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