GO · 함수
함수 — 다중 반환값 & Named Return
Go 함수의 핵심 특징: 여러 값을 반환하고, 에러를 마지막 반환값으로 처리합니다.
함수입문multiple-returnnamed-returnvariadicerrorfirst-class-function
핵심 설명
Go 함수의 핵심 특징: 여러 값을 반환하고, 에러를 마지막 반환값으로 처리합니다.
Go code
package main
import (
"errors"
"fmt"
"strconv"
)
// 다중 반환값 — Go의 관용구
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("0으로 나눌 수 없습니다")
}
return a / b, nil
}
// Named return values
func minMax(nums []int) (min, max int) {
min, max = nums[0], nums[0]
for _, n := range nums[1:] {
if n < min { min = n }
if n > max { max = n }
}
return // naked return
}
// 가변 인자
func sum(nums ...int) int {
total := 0
for _, n := range nums { total += n }
return total
}
// 함수를 값으로 (일급 함수)
func apply(fn func(int) int, vals []int) []int {
result := make([]int, len(vals))
for i, v := range vals {
result[i] = fn(v)
}
return result
}
func main() {
// 에러 처리 패턴
result, err := divide(10, 3)
if err != nil {
fmt.Println("에러:", err)
} else {
fmt.Printf("%.4f
", result)
}
_, err = divide(5, 0)
if err != nil { fmt.Println(err) }
// Named return
lo, hi := minMax([]int{3, 1, 4, 1, 5, 9, 2, 6})
fmt.Println("min:", lo, "max:", hi)
// 가변 인자
fmt.Println(sum(1, 2, 3, 4, 5))
nums := []int{1, 2, 3}
fmt.Println(sum(nums...)) // 슬라이스 전개
// 고차 함수
doubled := apply(func(n int) int { return n * 2 }, nums)
fmt.Println(doubled)
_ = strconv.Itoa(0)
}학습 팁
Named return은 짧은 함수에서만 사용하세요. 긴 함수에서 naked return은 코드를 읽기 어렵게 만듭니다.
주의할 점
_, err := fn()에서 에러를 무시하는 것(_)은 위험합니다. golangci-lint의 errcheck 룰로 이런 패턴을 잡을 수 있습니다.
자주 묻는 질문
함수 — 다중 반환값 & Named Return란 무엇인가요?
Go 함수의 핵심 특징: 여러 값을 반환하고, 에러를 마지막 반환값으로 처리합니다.
함수 — 다중 반환값 & Named Return 학습 시 주의할 점은 무엇인가요?
_, err := fn() 에서 에러를 무시하는 것( _ )은 위험합니다. golangci-lint 의 errcheck 룰로 이런 패턴을 잡을 수 있습니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.