Mengenal Fungsi, multiple return, variadic dan closure pada Golang
Second Function
Terdiri dari input, output.
Sampai sekarang program Go itu kita bisa gunakan hanya pada fungsi main saja seperti ini.
1 func main() {}1func average(xs []float64) float64 {
2 total := 0.0
3 for _, v := range xs {
4 total += v
5}
6 return total / float64(len(xs))
7}1func f() {
2 fmt.Println(x)
3}
4func main() {
5 x := 5
6 f()
7}1func f(x int) {
2 fmt.Println(x)
3}
4func main() {
5x := 5
6f(x) }Program C
1var x int = 5
2func f() {
3 fmt.Println(x)
4}
5func main() {
6 f()
7}1func main() {
2 fmt.Println(f1())
3}
4func f1() int {
5 return f2()
6}
7func f2() int {
8 return 1
9}Multiple Returning
Jika dalam pemrograman yang lain hanya bisa membalikan hasil cuma satu data tetapi dalam Go, memiliki keunikan tersendiri yaitu kita bisa melakukan output return yang lebih dari satu. Agar lebih bisa dipahami lihat dibawah ini.
1package main
2
3import "fmt"
4
5func f() (int, int) {
6 return 5, 6
7}
8func main() {
9 x, y := f()
10 fmt.Println(x, y)
11}Variadic Function
Yang paling spesial juga dalam pemrograman Go yaitu support untuk Variadic, yaitu multiple parameter.
1package main
2
3import "fmt"
4
5func add(args ...int) int {
6 total := 0
7 for _, v := range args {
8 total += v
9 }
10 return total
11}
12func main() {
13 fmt.Println(add(1, 2, 3))
14}Closure
Biasanya sering kita lihat pada pemrograman javascript atau typescript. Nah di Golang juga memiliki hal yang canggih seperti Closure ini. Berikut contoh programnya dibawah ini.
1package function
2
3import "fmt"
4
5func main() {
6 add := func(x, y int) int {
7 return x + y
8 }
9 fmt.Println(add(1, 1))
10} 1package main
2
3import "fmt"
4
5func main() {
6 x := 0
7 increment := func() int {
8 x++
9 return x
10 }
11 fmt.Println(increment())
12 fmt.Println(increment())
13}Contoh program lain diluar function bisa kita buat seperti ini
1package main
2
3import "fmt"
4
5func makeEvenGenerator() func() uint {
6 i := uint(0)
7 return func() (ret uint) {
8 ret = i
9 i += 2
10 return
11 }
12}
13func main() {
14 nextEven := makeEvenGenerator()
15 fmt.Println(nextEven()) // 0
16 fmt.Println(nextEven()) // 2
17 fmt.Println(nextEven()) // 4
18}Recursion
Memanggil fungsinya sendiri juga dalam Go bisa kita lakukan, misalkan contoh program untuk menghitung faktorial.
1package main
2
3import "fmt"
4
5func factorial(x uint) uint {
6 if x == 0 {
7 return 1
8 }
9 return x * factorial(x-1)
10}
11
12func main() {
13 fmt.Println(factorial(uint(3)))
14}Defer, Panic, Recover
defer adalah suatu pemanggilan yang nantinya akan diakhirkan. contoh bisa dilihat dibawah ini
1package main
2
3import "fmt"
4
5func first() {
6 fmt.Println("1st")
7}
8func second() {
9 fmt.Println("2nd")
10}
11func main() {
12 defer second()
13 first()
14}1package main
2import "fmt"
3func main() {
4 defer func() {
5 str := recover()
6 fmt.Println(str)
7 }()
8 panic("PANIC")
9}