Skip to content

Internal packages

An internal/ directory is a special convention. Code inside internal/ can only be imported by other code inside the same module (or its parent directories). This enforces encapsulation and prevents external usage of internal implementation details.

Project structure with an internal package.

Terminal window
myproject/
├── go.mod
├── internal/
└── helper/
└── helper.go // package helper
└── cmd/
└── myapp/
└── main.go // can import internal/helper
// internal/helper/helper.go
package helper
func Help() string {
return "internal help"
}
// cmd/myapp/main.go
package main
import (
"fmt"
"myproject/internal/helper"
)
func main() {
fmt.Println(helper.Help())
}
Terminal window
internal help