더북(TheBook)

Go에는 값을 두 개 이상 반환하는 함수가 많다(수행 결과와 에러 상태를 반환). 정상적으로 함수가 수행된 후에는 결괏값과 널(null)을 의미하는 nil을 반환하고, 정상적으로 수행되지 않았을 때는 제로값(false, 0, "", nil)과 에러 상태(error)를 반환한다(에러 처리는 6장 에러 처리에서 자세히 다룬다). Go의 기본 라이브러리 패키지에 있는 함수들이 대부분 이런 방식으로 작성되어 있다.

함수의 정상 수행 여부에 따라 각각 다른 로직을 처리해야 할 때 코드를 효과적으로 작성하는 방법을 알아보자.

strconv 패키지의 Atoi 함수는 문자열을 정수로 변환하여 수행 결과와 에러 상태를 반환한다. 다음은 strconv.Atoi() 함수를 사용한 예제이다.

▼ strconv.Atoi 함수의 정상 수행 여부에 따라 각각 다른 로직 처리

package main
  
import (
    "fmt"
    "strconv"
)
  
func displayInt(s string) {
    if v, err := strconv.Atoi(s); err != nil {
        fmt.Printf("%s는 정수가 아닙니다.\n", s)
    } else {
        fmt.Printf("정수 값은 %d입니다.\n", v)
    }
}
  
func main() {
    displayInt("two")
    displayInt("2")
}

실행 결과

two는 정수가 아닙니다.

정수 값은 2입니다.

if 문의 초기화 구문에는 strconv.Atoi(origin)의 결과를 변수 v, err에 받아오는 코드를 작성했고, 조건식으로 err의 유무를 확인했다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.