티스토리 뷰
함수
1. 함수 선언하기
우리는 이미 함수를 배웠다.
main() 자체가 함수 코드이기 때문이다. 따라 이를 기저로 함수의 선언을 분석하면 다음과 같다
func 함수이름(매개변수 타입 , 매개변수 타입) 함수반환타입 {
return 반환값
}
뭔가 굉장히 복잡해 보이지만, typescript나 kotlin을 배웠다면 그냥 매개변수의 타입 부분에서 ':' 을 뺀 것 뿐이다.
문자열을 받아서 3번 반복하고, 빈문자열인 경우 false를 반환하는 함수를 만들어보자
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
value, err := reader.ReadString('\n')
value = strings.TrimSpace(value)
if err != nil {
fmt.Println(err)
}
repeatStringThreeTimes(value, 3)
}
func repeatStringThreeTimes(value string, times int) bool {
if value == "" {
return false
}
for i := 0; i < times; i++ {
fmt.Print(value)
}
return true
}
golang에서 입력을 받을 때는 위의 과정을 걸치는데, delim이 "\n"면 엔터를 만날 때까지만 입력으로 받는다.
다만, "\n"도 같이 받으므로 삭제해주기 위해서는 value = strings.TrimSpace(value)
을 해주어야 한다.
이렇게 받은 문자열을 함수를 넘겨주어 3번 출력하도록 하는 것이다.
그런데, 만약 위의 함수에서 "" 일 때 단순히 false가 아니라 error의 이유도 반환하고 싶을 때는 어떻게 해야할까??
golang의 장점 중 하나는 golang은 python처럼 하나의 함수에서 여러 개의 값을 반환할 수 있다는 것이다.
이 사실을 이용하여 return 값에 error도 주도록하자, 받는 것은 이전에 보았던 err코드를 받았을 때 처럼 두 개의 파라미터가 받으면 된다.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
value, err := reader.ReadString('\n')
value = strings.TrimSpace(value)
if err != nil {
fmt.Println(err)
}
ret, err := repeatStringThreeTimes(value, 3)
if err != nil {
fmt.Println(err)
}
if ret == true {
fmt.Println("good results")
}
}
func repeatStringThreeTimes(value string, times int) (bool, error) {
if value == "" {
return false, fmt.Errorf("string value is a empty")
}
for i := 0; i < times; i++ {
fmt.Print(value)
}
return true, nil
}
빈 공백인 "" 을 입력하면 다음과 같은 결과가 나온다.
string value is a empty
'노답 스터디 > GO' 카테고리의 다른 글
Go를 배워보자 6일차 - 배열 (0) | 2021.07.25 |
---|---|
Go를 배워보자 5일차 - Package (0) | 2021.07.24 |
Go를 배워보자 4일차 - 포인터 (0) | 2021.07.23 |
Go를 배워보자 2일차 - 컴파일, 조건문, 반복문 (0) | 2021.07.23 |
Go를 배워보자 1일차 - GO의 기본 구조와 변수, 타입 (1) | 2021.07.22 |