Go Basics: Difference between revisions
Jump to navigation
Jump to search
Line 123: | Line 123: | ||
== Integer | == Types == | ||
=== Boolean === | |||
<source lang="go"> | |||
bool (true or false) | |||
</source> | |||
=== Integer === | |||
<source lang="go"> | <source lang="go"> | ||
byte (synonym for uint8) | byte (synonym for uint8) |
Revision as of 00:23, 11 February 2014
Resources: http://golang.org/
Install and Setup
sudo apt-get install golang
http://golang.org/doc/code.html discusses setting up the GOLANG environment variable and your code repository
mkdir -p $HOME/projects/go/src export GOPATH=$HOME/projects/go (add this to .profile too)
Hello World
// hello.go
package main
import (
"fmt"
"os"
"strings"
)
func main() {
who := "World!"
if len(os.Args) > 1 { /* os.Args[0] is "hello" or "hello.exe" */
who = strings.Join(os.Args[1:], " ")
}
fmt.Println("Hello", who)
}
Commands
godoc -http=:8000 # host docs at http://localhost:8000 go build # create binary file in local directory go install # create binary file in $GOPATH/bin go run # just run it, disposing of binary go get github.com/nsf/gocode # grab a remote package and install it to $GOPATH/bin go get -u github.com/nsf/gocode # update to latest version of remote package
Packages
- Every file should begin with a
package
statement. - A package may be defined across several files.
- Code execution begins with a
main()
function insidepackage main
Comments
// for end-of-line
/* for multiline */
Constants and Variables
count, err = fmt.Println(x) // get number of bytes printed and error
count, _ = fmt.Println(x) // get number of bytes printed; discard error
_, err = fmt.Println(x) // discard number of bytes printed; get error
fmt.Println(x) // ignore return values
const limit = 512 // constant; type-compatible with any number
const top uint16 = 1421 // constant; type: uint16
start := -19 // variable; inferred type: int
end := int64(9876543210) // variable; type: int64
var i int // variable; value 0; type: int
var debug = false // variable; inferred type: bool
checkResults := true // variable; inferred type: bool
stepSize := 1.5 // variable; inferred type: float64
acronym := "FOSS" // variable; inferred type: string
i, j := 56, 67 // multiple assignment
Enumerations
const Cyan = 0 // one-per-line
const Magenta = 1
const Yellow = 2
const ( // grouped
Cyan = 0
Magenta = 1
Yellow = 2
)
const ( // using iota
Cyan = iota // 0
Magenta // 1
Yellow // 2
)
type BitFlag int // different example
const (
Active BitFlag = 1 << iota // (1 << 0 == 1)
Send // Implicitly BitFlag = 1 << iota (1 << 1 == 2)
Receive // Implicitly BitFlag = 1 << iota (1 << 2 == 4)
)
flag := Active | Send
Numeric type conversions
const factor = 3 // factor is compatible with any numeric type
i := 20000 // i is of type int by inference
i *= factor
j := int16(20) // j is of type int16; same as: var j int16 = 20
i += int(j) // Types must match so conversion is required
k := uint8(0) // Same as: var k uint8
k = uint8(i) // Succeeds, but k's value is truncated to 8 bits ✗
fmt.Println(i, j, k) // Prints: 60020 20 116
func Uint8FromInt(x int) (uint8, error) {
if 0 <= x && x <= math.MaxUint8 {
return uint8(x), nil
}
return 0, fmt.Errorf("%d is out of the uint8 range", x)
}
Types
Boolean
bool (true or false)
Integer
byte (synonym for uint8)
int (int32 or int64)
int8, int16, int32, int64
rune (synonym for int32)
uint (uint32 or uint64)
uint8, uint16, uint32, uint64
uintptr (uint that stores a pointer)