>  기사  >  백엔드 개발  >  golang 함수의 매개변수 전달

golang 함수의 매개변수 전달

王林
王林원래의
2024-04-20 18:03:01305검색

golang 함수의 매개변수 전달

Go 함수의 매개변수 전달

Go에서 함수는 값이나 참조로 매개변수를 전달합니다. 코드 성능을 최적화하고 예상치 못한 동작을 방지하려면 이 두 가지 전달 방법 간의 차이점을 이해하는 것이 중요합니다.

값으로 전달

매개변수가 값으로 전달되면 함수는 매개변수 값의 복사본을 받습니다. 즉, 매개변수 값을 수정해도 함수 외부의 원래 매개변수에는 영향을 미치지 않습니다. 값으로 전달하는 것은 int, float64 및 string과 같은 불변 유형에 유용합니다. 함수 내에서 값이 변경되더라도 원래 값은 변경되지 않기 때문입니다.

코드 예:

package main

import "fmt"

func addValue(n int) {
    n++
}

func main() {
    num := 10
    addValue(num)
    fmt.Println(num) // 输出:10
}

Pass by reference

매개변수가 참조로 전달되면 함수는 매개변수의 주소를 받습니다. 즉, 매개변수 값을 수정하면 함수 외부의 원래 매개변수에 반영됩니다. 참조로 전달하는 것은 함수의 원래 값을 수정해야 하기 때문에 배열, 슬라이스, 맵과 같은 변경 가능한 유형에 유용합니다.

Go에서 참조로 전달을 구현하려면 포인터(*)를 사용할 수 있습니다. 포인터는 변수의 주소에 대한 참조입니다.

코드 예:

package main

import "fmt"

func addValuePtr(n *int) {
    *n++
}

func main() {
    num := 10
    addValuePtr(&num)
    fmt.Println(num) // 输出:11
}

실제 예

숫자 배열에 있는 모든 숫자의 합을 계산하는 다음 함수를 고려하세요.

func sum(nums []int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

pass-를 사용하여 이 함수에 배열을 전달하려고 하면 함수 내부의 값 기준 배열 요소를 수정해도 함수 외부의 원래 배열에는 영향을 주지 않습니다. 대신, 함수가 원래 배열에 액세스하고 해당 요소를 수정할 수 있도록 참조별 전달을 사용해야 합니다.

func main() {
    nums := []int{1, 2, 3, 4, 5}
    sumPtr(&nums)
    fmt.Println(nums) // 输出:[6 7 8 9 10]
}

func sumPtr(nums *[]int) {
    for i, num := range *nums {
        (*nums)[i] = num + 1
    }
}

위 내용은 golang 함수의 매개변수 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.