-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathfunctions.go
66 lines (49 loc) · 1.2 KB
/
functions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import "fmt"
// variadic function: accepts a variable number of arguments
func sum(values ...int) (result int) {
for _, v := range values {
result += v
}
return // result is a named return value
}
func transform(transformer func(v int) int, value int) int {
return transformer(value)
}
// multiple return values
func divide(a float32, b float32) (float32, error) {
if b == 0.0 {
return 0, fmt.Errorf("Attempted to divide by zero")
}
return a / b, nil
}
// Go supports methods defined on struct types.
type user struct {
name string
}
// value receiver (receives a copy of user instance when called)
func (u user) printName() {
fmt.Println(u.name)
}
// pointer receiver (receives a pointer to user instance when called)
func (u *user) printName2() {
fmt.Println(u.name)
}
func main() {
fmt.Println(sum(1, 2)) // 3
fmt.Println(sum(1, 2, 3)) //6
// Anonymous function
func(v int) {
fmt.Println(v) // 4
}(4)
// passing func around as variable or parameter
var square = transform(func(v int) int {
return v * v
}, 4)
fmt.Println(square) // 16
v, _ := divide(4, 2)
fmt.Println(v) // 2
var usr = user{name: "Adam"}
usr.printName() // Adam
(&usr).printName2() // Adam
}