(Go : basic) 12. function - 2

Posted by : at

Category : Go


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)
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links