Golang packages: Difference between revisions
From wikinotes
No edit summary |
|||
Line 84: | Line 84: | ||
Only exported symbols are exposed when a package is imported. | Only exported symbols are exposed when a package is imported. | ||
* Exported | * Exported symbols/variables are upper-cased. | ||
</blockquote><!-- Exported Functions --> | </blockquote><!-- Exported Functions --> | ||
== init function == | |||
<blockquote> | |||
Each file within a package can define an <code>init</code> function.<br> | |||
This function is evaluated the first time the package is imported. | |||
<syntaxhighlight lang="go"> | |||
# names/name.go | |||
import "fmt" | |||
package names | |||
var name string | |||
func init() { | |||
name = "foo" | |||
fmt.Println(name) | |||
} | |||
</syntaxhighlight> | |||
</blockquote><!-- init function --> | |||
</blockquote><!-- Defining Packages --> | </blockquote><!-- Defining Packages --> |
Revision as of 01:58, 2 June 2022
Basics
- Packages are groups of related code.
- Exported functions are callable when a package is imported
- The
main
package is your program's entrypoint (ex. cli)
Imports
import "fmt" import ( "fmt" // builtin pkgs have no module-path prefix "golang.org/x/example/stringutil" // non-builtin pkgs have module-path prefix (incl. local sub-packages) )
Defining Packages
Anatomy
# project heirarchy myproject/ mypackage/ libfoo.go libbar.go main.go go.mod
myproject/go.mod
// go.mod module github.com/you/myproject go 1.18
myproject/main.go
// main.go package main import "github.com/you/myproject/mypackage" func main() { mypackage.PrintHi(); }
myproject/mypackage/libfoo.go
// mypackage/libfoo.go package mypackage import "fmt" func PrintHi() { fmt.Println("hi") }Exported Functions
TODO:
Needs much more detail, and confirmation. (ex. what about constants? classes?)
Only exported symbols are exposed when a package is imported.
- Exported symbols/variables are upper-cased.
init function
Each file within a package can define an
init
function.
This function is evaluated the first time the package is imported.# names/name.go import "fmt" package names var name string func init() { name = "foo" fmt.Println(name) }