Golang 함수 사용법

GolangBeginner
지금 연습하기

소개

프로젝트가 복잡해짐에 따라 코드를 여러 함수로 나누는 것이 일반적입니다. 이 접근 방식은 코드 가독성을 향상시키고, 협업을 용이하게 하며, 코드를 중복하지 않고 로직을 빠르게 재사용할 수 있게 해줍니다. 이 랩에서는 Go 에서 함수를 생성하고 사용하는 기본 사항을 배우게 됩니다. 자신만의 함수를 정의하는 방법, Go 가 매개변수와 반환 값을 처리하는 방식, init 함수와 가변 매개변수에 대해 배우게 됩니다.

주요 내용:

  • 함수가 무엇이며 어떻게 작동하는지 이해하기
  • Go 에서 함수 선언하기
  • 값으로 및 참조로 매개변수 전달하기
  • 함수에서 여러 값 반환하기
  • 환경 설정을 위해 init 함수 사용하기
  • 유연한 입력 처리를 위한 가변 매개변수 사용하기
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

기본 프로그램 생성 및 실행

먼저, 프로젝트 디렉토리로 이동하여 Go 파일을 생성합니다.

cd ~/project
touch func.go

텍스트 편집기를 사용하여 func.go를 열고 다음 코드를 추가합니다.

package main

import "fmt"

func main() {
    a1, b1 := 12, 4
    a2, b2 := 12, 0

    // For the first pair
    if b1 == 0 {
        fmt.Println("The divisor cannot be 0")
    } else {
        fmt.Println(a1 / b1)
    }

    // For the second pair
    if b2 == 0 {
        fmt.Println("The divisor cannot be 0")
    } else {
        fmt.Println(a2 / b2)
    }
}

이 코드는 두 번의 나눗셈 연산을 시도하고 나눗셈 전에 0 으로 나누는 경우를 확인합니다. 제수가 0 이면 오류 메시지를 출력합니다.

프로그램을 실행합니다.

go run func.go

다음과 같은 출력을 볼 수 있습니다.

3
The divisor cannot be 0

함수 선언

이전 랩에서는 프로그램이 간단하든 복잡하든 상관없이 main 함수만 연산에 사용했습니다.

프로그램은 하나의 main 함수만 가질 수 있으며, 이는 프로그램의 진입점입니다. 프로그램을 실행하면 다른 함수들이 main 함수 내에서 직접 또는 간접적으로 호출되고 실행됩니다.

이제 함수의 구문을 살펴보겠습니다.

func functionName(parameters...)(returnValues...){
    code block
}

여기서 함수 이름은 함수를 식별하는 데 사용됩니다. 함수 이름에는 다음 규칙이 적용됩니다.

  • 문자, 숫자, 밑줄로 구성될 수 있습니다. 그러나 함수 이름의 첫 글자는 숫자가 될 수 없습니다. 예를 들어, func 3ab(){}는 유효하지 않습니다.
  • 첫 글자가 대문자인 경우 외부 패키지의 코드에서 참조할 수 있습니다. 첫 글자가 소문자인 경우 패키지 내에서만 사용할 수 있습니다. 이는 public 및 private 함수와 유사합니다.

매개변수 목록은 함수에 전달되는 매개변수의 수와 유형을 선언합니다.

  • 매개변수 목록은 비어 있거나 여러 매개변수를 포함할 수 있습니다.

  • 각 매개변수는 매개변수 이름과 매개변수 유형으로 구성됩니다. 예를 들어, 아래 매개변수 목록에서는 int 유형의 두 변수를 선언합니다.

    func test(a, b int) (res int){}

반환 값 목록은 함수가 실행된 후 필요한 값을 반환하는 데 사용됩니다.

  • 반환 값 목록은 매개변수 목록과 유사합니다. 매개변수의 수는 임의의 값일 수 있습니다.

  • 일반적으로 반환 목록은 변수 이름과 변수 유형으로 구성되며, 변수 이름은 선택 사항입니다.

  • 하나의 변수만 반환되고 변수 유형만 선언된 경우 괄호를 생략할 수 있습니다. 예를 들어:

    func test(a int, b string) int{}

매개변수 유형이 동일한 경우 축약형을 사용할 수 있습니다. 아래 두 함수는 동일한 기능을 수행합니다.

func test(a, b int, c, d string)(res1, res2 int, res3 string){}

// Short writing mode
func test(a, b int, c, d string)(res1, res2 int, res3 string){}

func.go의 내용을 다음 코드로 바꿉니다.

package main

import "fmt"

func check(divisor int) bool {
    if divisor == 0 {
        fmt.Println("The divisor cannot be 0")
        return false
    }
    return true
}

func main() {
    a1, b1 := 12, 4
    a2, b2 := 12, 0

    // Use the check function before division
    if check(b1) {
        fmt.Println(a1 / b1)
    }
    if check(b2) {
        fmt.Println(a2 / b2)
    }
}

프로그램을 다시 실행합니다.

go run func.go

동일한 출력을 볼 수 있습니다.

3
The divisor cannot be 0

이번에는 검사 로직이 check 함수에 캡슐화되어 코드가 더 깔끔하고 재사용 가능해졌습니다.

init 함수 사용법

Go 는 main 함수 전에 실행되는 init 함수를 지원합니다. 이는 종종 환경 조건을 설정하거나 주 실행 전에 변수를 초기화하는 데 사용됩니다.

func.go의 내용을 다음으로 바꿉니다.

package main

import "fmt"

func init() {
    fmt.Println("init statement")
}

func main() {
    fmt.Println("main statement")
}

프로그램을 실행합니다.

go run func.go

다음과 같은 출력을 볼 수 있습니다.

init statement
main statement

Go 에서 init 함수는 다음과 같은 특징을 가지고 있습니다.

  • 입력 매개변수나 반환 값이 없습니다.
  • 다른 함수에서 호출할 수 없습니다.

동일한 코드 파일 또는 동일한 패키지에 여러 개의 init 함수가 있을 수 있습니다. 실행 순서는 다음과 같습니다.

  • 동일한 코드 파일에서 먼저 나타나는 init 함수가 먼저 실행됩니다.
  • 동일한 package에서 사전순으로 먼저 나오는 파일이 먼저 실행됩니다. 예를 들어, 동일한 packageinit 함수가 있는 다음 파일이 포함된 경우:
a1.go
a2.go
b1.go

실행 순서는 a1.go, a2.go, b1.go가 됩니다. 왜냐하면 a > b 이고 1 < 2 이기 때문입니다.

함수에서 여러 값 반환하기

Go 는 함수가 여러 값을 반환하도록 허용합니다. 이는 여러 관련 계산을 한 번에 수행하는 데 유용합니다.

func.go의 내용을 다음으로 바꿉니다.

package main

import "fmt"

func cal(a, b int) (int, int, int, int) {
    return a + b, a - b, a * b, a % b
}

func main() {
    add, sub, mul, rem := cal(90, 12)
    fmt.Println(add, sub, mul, rem)
}

프로그램을 실행합니다.

go run func.go

다음과 같은 출력을 볼 수 있습니다.

102 78 1080 6

여기서 cal은 네 개의 값을 한 번에 반환하며, 여러 반환 값이 특정 작업을 어떻게 단순화할 수 있는지 보여줍니다.

가변 매개변수 사용법

가변 매개변수를 사용하면 함수가 가변적인 수의 인수를 받을 수 있습니다. 이는 입력 크기가 고정되지 않은 시나리오를 단순화할 수 있습니다.

func.go의 내용을 다음으로 바꿉니다.

package main

import "fmt"

func printX(values ...string) {
    for _, v := range values {
        fmt.Println(v)
    }
}

func main() {
    printX("labex", "labs", "courses")
}

프로그램을 실행합니다.

go run func.go

다음과 같은 출력을 볼 수 있습니다.

labex
labs
courses

printX 함수는 임의의 수의 문자열 인수를 처리할 수 있어 유연하고 사용하기 쉽습니다.

요약

이 랩에서는 Go 에서 함수를 정의하고 사용하는 방법을 배웠습니다. 여기에는 여러 값을 반환하고 가변적인 수의 매개변수를 허용하는 방법이 포함됩니다. 또한 init 함수가 main 전에 실행되는 방식도 확인했습니다. 코드를 함수로 구조화함으로써 프로그램을 더 쉽게 이해하고, 유지 관리하며, 재사용할 수 있습니다.

이러한 기술은 모듈식이고 확장 가능한 Go 애플리케이션을 구축하는 데 기본입니다. 프로젝트가 커짐에 따라 코드를 구성하고 로직을 관리하기 위해 함수를 활용하는 것이 점점 더 중요해질 것입니다.