📌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
의 반환값으로 length
와 uppercase
를 써주지 않아도 되는 것을 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를 바탕으로 작성하였습니다.