Project Organization and Style
Internal Boundaries
The internal directory gives Go projects an import boundary enforced by the toolchain.
Internal Boundaries
internal_boundaries.go
package main
import (
"fmt"
"strings"
)
func main() {
var importPath =
ownedPrefix := "example.com/shop/"
usesInternal := strings.Contains(importPath, "/internal/")
owned := strings.HasPrefix(importPath, ownedPrefix)
allowed := !usesInternal || owned
fmt.Println("import=", importPath)
fmt.Println("uses_internal=", usesInternal)
fmt.Println("owned_prefix=", owned)
fmt.Println("allowed=", allowed)
}
package main
import (
"fmt"
"strings"
)
func main() {
var importPath =
ownedPrefix := "example.com/shop/"
usesInternal := strings.Contains(importPath, "/internal/")
owned := strings.HasPrefix(importPath, ownedPrefix)
allowed := !usesInternal || owned
fmt.Println("import=", importPath)
fmt.Println("uses_internal=", usesInternal)
fmt.Println("owned_prefix=", owned)
fmt.Println("allowed=", allowed)
}
package main
import (
"fmt"
"strings"
)
func main() {
var importPath =
ownedPrefix := "example.com/shop/"
usesInternal := strings.Contains(importPath, "/internal/")
owned := strings.HasPrefix(importPath, ownedPrefix)
allowed := !usesInternal || owned
fmt.Println("import=", importPath)
fmt.Println("uses_internal=", usesInternal)
fmt.Println("owned_prefix=", owned)
fmt.Println("allowed=", allowed)
}
internal packages
Model internal imports explicitly so package boundaries stay visible.