티스토리 뷰

노답 스터디/GO

Go를 배워보자 3일차 - 함수

꼰대 개발자 2021. 7. 23. 21:40

함수

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함