Golang anatomy
From wikinotes
myproject/
go.mod // module name, requirements
main.go // optional CLI entrypoint
printer.go // other 'main' package src are in toplevel dir
internal/ // exported symbols from internal packages are only exposed within 'myproject'
logger/ // subpackage
logger.go
math/ // subpackage
division.go
multiplication.go
// myproject/go.mod
module example.com/x/myproject
go 1.18
// myproject/main.go
package main
import (
"fmt"
"example.com/x/myproject/internal/logger"
)
func main() {
logger.Info.Println("a log statement")
fmt.Println("hello world")
}
// myproject/internal/logger/logger.go
package logger
var Info *log.Logger
func init() {
Info = log.New(io.Stderr, "INFO: ", log.Ldate|log.Ltime|log.Llongfile)
}