PHpullh
학습 라이브러리/Go/함수 — 다중 반환값 & Named Return

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-linterrcheck 룰로 이런 패턴을 잡을 수 있습니다.

자주 묻는 질문

함수 — 다중 반환값 & Named Return란 무엇인가요?

Go 함수의 핵심 특징: 여러 값을 반환하고, 에러를 마지막 반환값으로 처리합니다.

함수 — 다중 반환값 & Named Return 학습 시 주의할 점은 무엇인가요?

_, err := fn() 에서 에러를 무시하는 것( _ )은 위험합니다. golangci-lint 의 errcheck 룰로 이런 패턴을 잡을 수 있습니다.