>백엔드 개발 >Golang >Golang 함수 매개변수는 어떻게 전달되나요?

Golang 함수 매개변수는 어떻게 전달되나요?

PHPz
PHPz원래의
2024-04-12 08:54:01738검색

Go에는 함수 매개변수를 전달하는 세 가지 방법이 있습니다: 값에 의한 전달(값 또는 복사), 참조에 의한 전달(포인터), 불변 참조에 의한 전달(구조/배열 참조, 수정 불가능한 객체). 값으로 전달된 경우 함수는 값의 복사본에 대해 작동하며 원래 값에 영향을 주지 않습니다. 참조로 전달된 경우 함수는 불변 참조로 전달된 경우 원래 값을 수정할 수 있으며 함수는 필드에서 작동할 수 있습니다. 객체이지만 객체 자체를 수정하지는 않습니다. 이 세 가지 방법은 다양한 시나리오에 적합합니다. 예를 들어 값 전달은 읽기 전용 작업에 적합하고, 참조 전달은 수정 작업에 적합하며, 불변 참조 전달은 구조/배열의 필드 작업에 적합합니다.

Golang 함수 매개변수는 어떻게 전달되나요?

Go 함수 매개변수 전달 메커니즘

Go 언어에서 함수 매개변수는 세 가지 주요 방식으로 전달됩니다.

  • 값에 의한 전달(값에 의한 호출): 값(또는 값) )을 함수에 추가합니다.
  • Pass by reference(call by reference): 함수가 원래 값을 수정할 수 있도록 값에 대한 포인터를 함수에 전달합니다.
  • 불변 참조 값으로 호출: 함수에 구조 또는 배열의 불변 참조를 전달하여 함수가 원래 객체를 수정할 수 없지만 해당 필드를 수정할 수 있도록 합니다(구조 또는 배열에 if가 있는 경우).

값으로 전달

값으로 매개변수를 전달하면 매개변수 값의 복사본이 전달됩니다. 이 값을 수정하면 원래 값이 아닌 함수 내의 복사본에만 영향을 미칩니다.

func modifyValue(num int) {
    num *= 2
}

func main() {
    x := 10
    modifyValue(x)
    fmt.Println(x) // 输出:10
}

참조로 전달

함수가 전달된 값을 수정하도록 허용하려면 참조로 포인터 전달을 사용할 수 있습니다. 이는 * 접두사를 사용하여 포인터 매개변수를 선언함으로써 수행됩니다. * 前缀来声明一个指针参数来实现。

func modifyReference(num *int) {
    *num *= 2
}

func main() {
    x := 10
    modifyReference(&x)
    fmt.Println(x) // 输出:20
}

按不可变引用传递

结构体和数组可以通过传递其不可变引用来传递。这允许函数访问结构体或数组的字段,但不能修改对象本身。

type Point struct {
    x int
    y int
}

func modifyPoint(p Point) {
    p.x *= 2
}

func main() {
    point := Point{10, 20}
    modifyPoint(point)
    fmt.Println(point) // 输出:{20 20}
}

实战案例

假设我们有一个函数 calculateTotalCost,它的作用是给定一个项目列表,计算它们的总成本。

import "fmt"

type Item struct {
    name  string
    price float64
}

func calculateTotalCost(items []Item) float64 {
    total := 0.0
    for _, item := range items {
        total += item.price
    }
    return total
}

func main() {
    items := []Item{
        {"Item 1", 10.00},
        {"Item 2", 20.00},
        {"Item 3", 30.00},
    }

    totalCost := calculateTotalCost(items)
    fmt.Println(totalCost) // 输出:60.00
}

在这种情况下,items 作为一个按值传递的切片。这意味着该函数将收到 itemsrrreee

🎜불변 참조로 전달🎜🎜🎜구조체와 배열은 불변 참조를 전달하여 전달할 수 있습니다. 이를 통해 함수는 구조체나 배열의 필드에 액세스할 수 있지만 객체 자체를 수정할 수는 없습니다. 🎜rrreee🎜🎜실용 사례🎜🎜🎜 calculateTotalCost 함수가 있다고 가정해 보겠습니다. 해당 함수는 항목 목록에 따라 총 비용을 계산하는 것입니다. 🎜rrreee🎜이 경우 items는 값별로 조각으로 전달됩니다. 이는 함수가 원본 조각을 수정하지 않고 items 변수의 복사본을 수신한다는 의미입니다. 🎜

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

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