Maps Link to heading
map has to initialized with make
package main
import "fmt"
func main() {
var m map[string]string
m = make(map[string]string)
m["a"] = "a1"
fmt.Println(m)
}
Structure Link to heading
type struct to create a container for variables. in this example, b1 variable of type Book. b2 is the same with initialized.
package main
import "fmt"
type Book struct {
title string
pages int
}
func main() {
var b1 Book
b1.pages = 100
b1.title = "koko"
fmt.Println(b1)
b2 := Book{title: "b2", pages: 100}
fmt.Println(b2)
}
OOP-ish Link to heading
class can be defined with type <name> struct. the class methods can be defined with type <intf> interface. and finally to define type method.
package main
import "fmt"
type PersonIntf interface {
GetAge() int
}
type Person struct {
name string
age int
}
func (person Person) GetAge() int {
return person.age
}
func main() {
p := Person{name: "ah", age: 100}
fmt.Println(p)
fmt.Println(p.GetAge())
}
Error Handling Link to heading
go handle error with multiple return functions. The second return can be error.
if all is well, you can return nil. in case of error, we can return errors.New.
package main
import (
"errors"
"fmt"
)
func e(i int) (int, error) {
if i < 0 {
return 0, errors.New("bad")
} else {
return i, nil
}
}
func ce(i int) {
fmt.Println("===========")
i, err := e(i)
if err != nil {
fmt.Println(err)
}
fmt.Println(i)
}
func main() {
ce(2)
ce(-1)
}