이 글은 Effective Go를 일부 번역한 글입니다.


함수

이름 붙은 결과 매개 변수

Go 함수는 반환 또는 결과 매개 변수에 이름을 붙여 평범한 변수로 쓸 수 있다. 입력 매개 변수를 떠올리면 된다. 이름을 붙이면 함수를 시작할 때 각 형에 맞게 0 값으로 초기화한다. 함수가 인수 없이 return 문장을 실행하면, 현재 결과 매개 변수 값을 반환 값으로 사용한다.

이름 짓는 게 의무는 아니지만 코드를 더 짧고 명확하게 만들 수 있다. 이름이 곧 문서이기 때문이다. nextInt 결과에 이름을 붙이면 반환된 int가 뭔지 명확해진다.

func nextInt(b []byte, pos int) (value, nextPos int) {

결과에 이름을 지으면 초기화되고 반환을 꾸미지 않아도 되기 때문에 간단하면서도 명확해진다. io.ReadFull의 형태가 이를 잘 보여준다.

func ReadFull(r Reader, buf []byte) (n int, err error) {
    for len(buf) > 0 && err == nil {
        var nr int
        nr, err = r.Read(buf)
        n += nr
        buf = buf[nr:]
    }
    return
}