Programming/GoLang

[Go] Functions 기초

nayoungs 2022. 9. 22. 19:09
728x90

 

📌Index

  • Function 정의하기
  • Multiple Value를 반환하는 Function 만들기
  • 여러개의 Argument를 가질 수 있는 Function 만들기
  • Naked Return
  • Defer

 

 

 

🔎 VScode에서 실습을 진행합니다.

✔️ Function 정의하기

곱셈 연산을 수행하는, multiply function을 정의해보자.

main.go

func mutiply(a int, b int) int {
    return a*b
}

파라미터의 타입, 리턴 타입을 위와 같이 작성해준다.

만약 여기서 더 간단하게 작성하고 싶고, a와 b의 타입이 같다면, 다음과 같이 작성하는 것도 가능하다.

func multiply(a , b int) int {
	return a * b
}



✔️ Multiple Value를 반환하는 Function 만들기

Go의 매력적인 부분 중 하나는, function이 여러개의 return 값을 가질 수 있다는 것이다.

예로 다음과 같이 문자열의 길이와, 대문자로 반환한 문자열을 반환하는 함수를 정의해보자.

func lenAndUpper(name string) (int, string){
    return len(name), strings.ToUpper(name)
}

Function 요청은 어떻게 할까?

main.go

package main

import (
	"fmt"
	"strings"
)

func lenAndUpper(name string) (int, string) {
	return len(name), strings.ToUpper(name)
}

func main() {
	totalLength, upperName := lenAndUpper("nayoung")
	fmt.Println(totalLength, upperName)
}

실행하면 잘 출력되는 것을 확인할 수 있다.

$ go run .\main.go
7 NAYOUNG

만약 totalLentgh만을 반환 받으려하면 어떨까?

func main() {
	totalLength := lenAndUpper("nayoung")
    fmt.Println(totalLength, upperName)
}

lenAndUpper 는 두개의 값은 return하기 때문에 에러가 발생한다.

다만 방법이 없는 것은 아니고, 다음과 같이 value값을 무시하는 코드를 작성하면 된다.

func main() {
	totalLength, _ := lenAndUpper("nayoung")
	fmt.Println(totalLength)
}

 

 

✔️ 여러개의 Argument를 가질 수 있는 Function 만들기

여러개의 Argument를 가질 수 있는 함수를 가변 인자 함수(Variadic parameter)라 한다.

python에서도 *args, **kwargs를 사용해본 적이 있을 것이다.

함수의 argument 앞에 ...을 붙이면 되고, n개의 동일한 type의 매개변수를 전달해야한다.

예시는 다음과 같다.

func repeatMe(words ...string) {
	fmt.Println(words)
}

func main() {
	repeatMe("nayoung", "isabelle", "max", "lisa", "jisoo")
}

실행해보면, 다음과 같이 리스트 형태로 출력되는 것을 확인할 수 있다.

$ go run .\main.go
[nayoung isabelle max lisa jisoo]

참고로 주의할 점은, Golang은 무엇을 만들고 사용하지 않으면 오류를 발생시킨다. (변수를 선언하고 사용하지 않는 등..)



✔️ Naked Return

앞서 작성한 lenAndUpper함수를 다음과 같이 변형해서 작성이 가능하다.

func lenAndUpper(name string) (length int, uppercase string) {
	length = len(name)
	uppercase = strings.ToUpper(name)
	return
}

golang에서 이와같이 lenAndUpper의 반환값으로 lengthuppercase를 써주지 않아도 되는 것을 naked return이라고 한다.



✔️ Defer

defer는 function이 끝났을 때 추가적으로 더 동작할 수 있도록 해주는 기능이다. 함수가 종료되기 전까지 특정 구문의 실행을 지연시켰다가, 함수가 종료되기 직전에 지연시켰던 구문을 수행한다. 다음과 같이 작성할 수 있다.

func lenAndUpper(name string) (length int, uppercase string) {
	defer fmt.Println("I'm done")
	length = len(name)
	uppercase = strings.ToUpper(name)
	return
}

func main() {
	totalLength, up := lenAndUpper("nayoung")
	fmt.Println(totalLength, up)
}

실행해보면 다음과 같다.

$ go run .\main.go
I'm done
7 NAYOUNG

 

 

 

 

 쉽고 빠른 Go 시작하기 – 노마드 코더 Nomad Coders를 바탕으로 작성하였습니다.

728x90