Golang anatomy: Difference between revisions
From wikinotes
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
<syntaxhighlight lang=" | Project Structure | ||
<syntaxhighlight lang="bash"> | |||
myproject/ | myproject/ | ||
go.mod | go.mod # module name, requirements | ||
main.go | main.go # optional CLI entrypoint | ||
printer.go | printer.go # other 'main' package src are in toplevel dir | ||
internal/ | internal/ # exported symbols from internal packages are only exposed within 'myproject' | ||
logger/ | logger/ # subpackage | ||
logger.go | logger.go | ||
math/ | math/ # subpackage | ||
division.go | division.go | ||
multiplication.go | multiplication.go | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{expand | |||
| myproject/go.mod | |||
| | |||
<syntaxhighlight lang="go"> | <syntaxhighlight lang="go"> | ||
// myproject/go.mod | // myproject/go.mod | ||
Line 20: | Line 24: | ||
go 1.18 | go 1.18 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | |||
{{expand | |||
| myproject.main.go | |||
| | |||
<syntaxhighlight lang="go"> | <syntaxhighlight lang="go"> | ||
// myproject/main.go | // myproject/main.go | ||
Line 36: | Line 44: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | |||
{{expand | |||
| myproject/internal/logger/logger.go | |||
| | |||
<syntaxhighlight lang="go"> | <syntaxhighlight lang="go"> | ||
// myproject/internal/logger/logger.go | // myproject/internal/logger/logger.go | ||
Line 48: | Line 60: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
}} |
Revision as of 04:42, 20 June 2022
Project Structure
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
// myproject/go.mod
module example.com/x/myproject
go 1.18
myproject.main.go
// 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
// 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)
}