Golang

Functions (2)

느리지만 꾸준하게 2021. 12. 11. 21:33

go 공부를 할 때 아래코드와 같이 int와 string을 return 한다고 코드를 작성했었다.

package main

import (
	"fmt"
	"strings"
)

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

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

// 3 JAY

naked return이라고 return 할 변수들을 굳이 꼭 명시하지 않아도 되는데

length, uppercase를 return할 필요가 없는 것이다.

package main

import (
	"fmt"
	"strings"
)

func lenAndUpper(name string) (length int, uppercase string) {
	length = len(name)
	uppercase = strings.ToUpper(name)
	return length, uppercase // length, uppercase가 필요없음
}

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

즉 아래와 같이 코드를 적어주자.

package main

import (
	"fmt"
	"strings"
)

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

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

또 defer라고 있는데 Go의 아주 멋진 기능이다. defer는 function이 값을 return 하고 나면 실행이 될 것이다.

즉 이미지를 열거나, 파일을 생성하고 나서 defer로 function이 끝났을 때 이미지를 닫거나, 파일을 닫거나, 삭제할 때

API로 요청을 보낼 때 쓰일 수 있다.

 

즉 defer는 function 끝나고 나서 실행되는 거라고 보면 된다.

package main

import (
	"fmt"
	"strings"
)

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

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

// I'm done
// 3 JAY

 

 

 

 

 

 

 

 

 

 

<출처 노마드 코더: 쉽고 빠른 Go 시작하기>

https://nomadcoders.co/go-for-beginners/lobby

 

Watch Now – 노마드 코더 Nomad Coders

 

nomadcoders.co

 

'Golang' 카테고리의 다른 글

if & switch  (0) 2021.12.12
for&range&args  (0) 2021.12.12
Functions (1)  (0) 2021.12.11
go: cannot find main module error  (0) 2021.12.11
Go 들어가기에 앞서 Building 내용  (0) 2021.12.11