Packages stay easier to test when higher-level layers depend on lower-level interfaces deliberately.

Dependency Direction

dependency_direction.go
package main

import "fmt"

func main() {
	var layer = 
	allowed := map[string][]string{
		"handler": {"domain", "log"},
		"domain":  {"time"},
		"storage": {"domain", "database/sql"},
	}

	dependencies := allowed[layer]
	stable := layer != "domain" || len(dependencies) == 1

	fmt.Println("layer=", layer)
	fmt.Println("dependency_count=", len(dependencies))
	for _, dependency := range dependencies {
		fmt.Println("depends_on=", dependency)
	}
	fmt.Println("stable_core=", stable)
}
package main

import "fmt"

func main() {
	var layer = 
	allowed := map[string][]string{
		"handler": {"domain", "log"},
		"domain":  {"time"},
		"storage": {"domain", "database/sql"},
	}

	dependencies := allowed[layer]
	stable := layer != "domain" || len(dependencies) == 1

	fmt.Println("layer=", layer)
	fmt.Println("dependency_count=", len(dependencies))
	for _, dependency := range dependencies {
		fmt.Println("depends_on=", dependency)
	}
	fmt.Println("stable_core=", stable)
}
package main

import "fmt"

func main() {
	var layer = 
	allowed := map[string][]string{
		"handler": {"domain", "log"},
		"domain":  {"time"},
		"storage": {"domain", "database/sql"},
	}

	dependencies := allowed[layer]
	stable := layer != "domain" || len(dependencies) == 1

	fmt.Println("layer=", layer)
	fmt.Println("dependency_count=", len(dependencies))
	for _, dependency := range dependencies {
		fmt.Println("depends_on=", dependency)
	}
	fmt.Println("stable_core=", stable)
}
dependency direction Track which layer owns a dependency so imports do not grow into cycles.