package main
import "fmt"
func multiply(n ...int) int {
tot := 1
for _, value := range n {
tot *= value
}
return tot
}
func sum(n ...int) int {
tot := 0
for _, value := range n {
tot += value
}
return tot
}
func prtWord(msg ...string) {
for _, value := range msg {
fmt.Println("ex2 :", value)
}
}
func main() {
//함수 고급
//가변 인자 실습(매개변수 개수가 동적으로 변할 때 - 정해져있지 않음)
//예제1
x := multiply(5, 6, 7, 8, 9, 10)
y := sum(5, 6, 7, 8, 9, 10)
fmt.Println("ex1 :", x)
fmt.Println("ex1 :", y)
fmt.Println()
//예제2
prtWord("a", "apple", "test", "seoul", "golang", "hi")
fmt.Println()
//예제3
a := []int{5, 6, 7, 8, 9, 10}
m := multiply(a...)
n := sum(a...)
fmt.Println("ex3 :", m)
fmt.Println("ex3 :", n)
}
package main
import "fmt"
func multiply(x, y int) (r int) {
r = x * y
return
}
func sum(x, y int) (r int) {
r = x + y
return
}
func main() {
//함수 고급
//함수를 변수에 할당
//예제1 (슬라이스에 할당)
f := []func(int, int) int{multiply, sum}
a := f[0](10, 10)
b := f[1](10, 10)
fmt.Println("ex1 :", a, f[0](10, 10))
fmt.Println("ex1 :", b, f[1](10, 10))
fmt.Println()
//예제2 (변수에 할당)
var f1 func(int, int) int = multiply
f2 := sum
fmt.Println("ex2 :", f1(10, 10))
fmt.Println("ex2 :", f2(10, 10))
fmt.Println()
//예제3 (맵에 할당)
m := map[string]func(int, int) int{
"multiply": multiply,
"sum": sum,
}
fmt.Println("ex3 :", m["multiply"](10, 10))
fmt.Println("ex3 :", m["sum"](10, 10))
}
package main
import "fmt"
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
func prtHello(n int) {
if n == 0 {
return
}
fmt.Println("ex2 : (", n, ")", "hi!")
prtHello(n - 1)
}
func main() {
//함수 고급
//재귀 함수(Recursion)
//예제1
x := fact(7)
fmt.Println("ex1 :", x)
//예제2
prtHello(10)
}
람다식(Anonymous Functions)
package main
import "fmt"
func main() {
//함수 고급
//익명 함수(Anonymous Functions)
//예제1
func() {
fmt.Println("ex1 : Anonymous func!")
}()
fmt.Println()
//예제2
msg := "Hello Golang!"
func(m string) {
fmt.Println("ex2 : ", m)
}(msg)
fmt.Println()
//예제3
func(x, y int) {
fmt.Println("ex3 : ", x+y)
}(10, 20)
fmt.Println()
//예제4
r := func(x, y int) int {
return x * y
}(10, 10)
fmt.Println("ex4 : ", r)
}