Public vs. private

yourbasic.org/golang
PRIVATE KEEP OUT

A package is the smallest unit of private encap­sulation in Go.

Exported and unexported identifiers are used to describe the public interface of a package and to guard against certain programming errors.

Warning: Unexported identifiers is not a security measure and it does not hide or protect any information.

Example

In this package, the only exported identifiers are StopWatch and Start.

package timer import "time" // A StopWatch is a simple clock utility. // Its zero value is an idle clock with 0 total time. type StopWatch struct {	start time.Time	total time.Duration	running bool } // Start turns the clock on. func (s *StopWatch) Start() {	if !s.running {	s.start = time.Now()	s.running = true	} }

The StopWatch and its exported methods can be imported and used in a different package.

package main import "timer" func main() {	clock := new(timer.StopWatch)	clock.Start()	if clock.running { // ILLEGAL // …	} }
../main.go:8:15: clock.running undefined (cannot refer to unexported field or method clock.running)