Packages in Go and Other Things
In this issue, I share some of my notes on packages, variables and types
-
Packages in Go are the building blocks of Go programs that divide the content into understandable parts
-
you can import similar packages in this format
import ( "github.com/devopsforgo/mypackage" jpackage "github.com/johnsilver/mypackage" ) // use it this way mypackage.Print() jpackage.Send() -
To import a package that you won’t use mainly because the presence of the package causes something to happen, you can do it by prepending an underscore(_) before the package name like so
package main import ( "fmt" _ "sync" ) -
The entrance point for any Go binary is a package named
mainthat has a function calledmain() -
The init function runs before the
main()function, this is useful in situations where you need to assign command line flags to variables before you call the main function. -
Go is a statically typed language
-
In a statically typed language, the type is both what is stored in the variable and what can be stored in the variable.
-
Go Built-in Types
boolstringstruct- byte (alias for uint8)
- rune (alias for int32) - representation of a utf-8 character. done by adding a single quote before a value
- float32 float64
intint8 int16 int32 int64uintuint8 uint16 uint32 uint64uintptr- holds a pointer address- complex64 complex128 - complex numbers
-
package level → meaning outside a function
-
you can only declare a variable like this within a function
hello := "this is a test" -
The important thing to remember when using
:=is that it means create and assign. If the variable already exists, you cannot use:=, but you must use=, which does only an assignment. -
A scope is the part of a program in which a variable can be seen.
-
Go has the following variable scope:
- Package scope → declared outside a function
- Function scope → declared in a function
- Statement scope → declared in a statement within a function (for loop, if/else)
Best practices for packaging your Go Code
- make your struct and interfaces in uppercase so that you can access them directly
- The idea is to make sure to have less code in the
main.gofunction - use a pointer when making a change to a variable in a struct and want to persist the change