오늘은 function함수에 대해 알아볼 것이다.
1. 기본적인 function
Go언어에서 기본적인 사용법은 아래와 같다.
func <함수이름>(인자 <인자 type> ) <리턴 type>
예를 들어 처음 main함수가 시작할때 아래처럼 사용한다.
func main() {
}
그러면 한 번 plus라는 두 값을 받아서 더한 값을 return하는 함수를 만들어보자.
1. main 패키지
2. fmt import하기
3. func plus(a, b) 명령어로 함수 만들기
4. return 함수 사용하기
5. main 함수 만들기
6. fmt함수 사용해서 함수 리턴 값 출력
package main
import (
"fmt"
)
func plus(a, b int) int {
return a + b
}
func main() {
fmt.Println(plus(2, 4))
}
위와 같이 코드가 짜여 진다.
그러면 결과가 6이라고 잘 나온다.
2.여러개의 return
그리고 Go언어는 신기하게도, 여러개의 값을 return 할 수있다.
어떤 문자열이 들어가고 그 문자열의 글의 개수와 그 문자열을 대문자든 것을 리턴하는 프로그램을 만들면,
아래와 같다.
package main
import "fmt"
import "strings"
func lenandupper(str string) (string, int) {
return strings.ToUpper(str), len(str)
}
func main() {
Upperstr, length := lenandupper("hello")
fmt.Println(Upperstr, length)
}
strings는 문자열을 모두 대문자로 만드는 ToUpper를 사용할 수 있어서 import했다.
function을 정의하는 부분을 보면 (str string) (string, int) 라고 되어 있는데,
첫번째 괄호는 string은 str이라는 인자를 string형식으로 받는 것이고,
두번째 괄호는 string, int 두개를 return한다는 것이다.
3. naked
naked은 다르게 return을 하는 방식인데,
미리 처음 function을 정의를 할때 미리 return값을 같이 정의하는 것이다.
방금 작성한 코드를 naked방식으로 하면, 아래와 같다.
package main
import "fmt"
import "strings"
func lenandupper(str string) (upper string, Length int) {
Length = len(str)
upper = strings.ToUpper(str)
return
}
func main() {
Upperstr, length := lenandupper("hello")
fmt.Println(Upperstr, length)
}
Length라는 문자열 하고 upper를 미리 function정의 하는 곳에 같이 정의를 내려준다.
그리고 이미 위에서 upper하고 Length를 무엇을 리턴할지를 정의를 내렸기 때문에 다시 return할때 적을 필요가 없다.
이 naked형식을 사용하면 무엇을 리턴하는지 알기 때문에 사용한다고 한다.
4. defer
defer 함수는 function이 끝나고 실행하는 함수이다.
예를 들어 아까의 코드에 함수가 끝나고 "this is so cool" 출력 하려면 다음과 같다.
package main
import "fmt"
import "strings"
func lenandupper(str string) (upper string, Length int) {
defer fmt.Println("THis is so cool")
Length = len(str)
upper = strings.ToUpper(str)
return
}
func main() {
Upperstr, length := lenandupper("hello")
fmt.Println(Upperstr, length)
}
이렇게 위처럼 나올수 있다.
defer이 function을 만드는데 굉장히 효과적이다.
별겨 아닌것 같지만 복잡한 프로그램을 만드는데 중요한 부분이 될 수 있다.
'Go' 카테고리의 다른 글
[Go] for(반복)문 사용하는법(Use loop for in Go) (0) | 2022.01.22 |
---|---|
[Go] 상수와 변수 선언(Variables and Constants) (0) | 2021.02.07 |
[Go] Package, import,func - hello go 출력하기 (기본문법) (0) | 2021.02.07 |
[Go] go 언어 VScode에 설치 및 사용 (0) | 2021.02.07 |