(Go : basic) 11. function - 1

Posted by : at

Category : Go


package main

import "fmt"
import "strconv"

//함수 선언 위치는 어느 곳이든 가능
func helloGolang() {
	fmt.Println("ex1 : Hello Golang!")
}

/*
func helloGolang() //예외 발생(괄호 위치 컴파일 에러)
{
	fmt.Println("Hello Golang!")
}
*/

func say_one(m string) {
	fmt.Println("ex2 :", m)
}

func sum(x int, y int) int {
	return x + y
}

func main() {
	//함수
	//선언 : func 키워드로 선언
	//func 함수명(매개변수) (반환타입 or 반환 값 변수명) : 반환 값 존재
	//func 함수명() (반환타입 or 반환 값 변수명) : 매개변수 없음, 반환 값 존재
	//func 함수명(매개변수) : 매개변수 존재, 반환 값 없음
	//타 언어와 달리 반환 값(return value) 여러 개 가능

	//예제1
	helloGolang()

	//예제2
	say_one("Hello World!")

	//예제3
	result := sum(5, 5)
	fmt.Println("ex3 :", result)
	fmt.Println("ex3 :", sum(10, 10))
	fmt.Println("ex3 :", strconv.Itoa(sum(10, 10))) //int to string (strconv.Atoi(int) : string to int)
}
package main

import "fmt"

func sum(i int, f func(int, int)) {
	f(i, 10) // add(1, 2)를 호출
}

func add(a, b int) {
	fmt.Println("ex1 :", a+b)
}

func multi_value(i int) {
	i = i * 10
}

func multi_reference(i *int) {
	*i *= 10 // *i = *i * 10
}

func main() {
	//함수(콜백) 및 참조 전달(call by reference) 및 값 전달(call by value)

	//예제1 (콜백 호출)
	sum(10, add) //함수 전달

	//예제2
	//call by value
	a := 100

	multi_value(a)
	fmt.Println("ex2 :", a)

	//예제3
	//reference by value
	b := 100

	multi_reference(&b)
	fmt.Println("ex3 :", b)
}
package main

import "fmt"

func multiply(x int, y int) (int, int) { //(x, y int)가능
	return x * 10, y * 15
}

func arrayMultiply(a, b, c, d, e int) (int, int, int, int, int) {
	return a * 1, b * 2, c * 3, d * 4, e * 5
}

func main() {
	//다중 값 반환(return values)

	//예제1
	a, b := multiply(10, 5)
	//c := multiply(5, 10) //예외 발생(리턴 값 개수 != 선언 변수 개수)
	c, _ := multiply(10, 5)
	_, d := multiply(5, 10)

	fmt.Println("ex1 : ", a, b)
	fmt.Println("ex1 : ", c)
	fmt.Println("ex1 : ", d)

	//예제2
	x1, x2, x3, x4, x5 := arrayMultiply(1, 2, 3, 4, 5)
	y1, _, y3, _, y5 := arrayMultiply(1, 2, 3, 4, 5)
	fmt.Println("ex2 : ", x1, x2, x3, x4, x5)
	fmt.Println("ex2 : ", y1, y3, y5)
}
package main

import "fmt"

func multiply(x int, y int) (r1 int, r2 int) {
	r1 = x * 10
	r2 = y * 20
	return //리턴 변수 지정
}

func multiply2(x int, y int) (int, int) {
	return x * 10, y * 20
}

func main() {
	//다중 값 반환(return values)

	//예제1
	a, b := multiply(10, 5)
	fmt.Println("ex1 : ", a, b)

	//예제2
	c, d := multiply2(10, 5)
	fmt.Println("ex2 : ", c, d)
}

About Taehyung Kim

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

Star
Useful Links