Go에는 함수 매개변수를 전달하는 세 가지 방법이 있습니다: 값에 의한 전달(값 또는 복사), 참조에 의한 전달(포인터), 불변 참조에 의한 전달(구조/배열 참조, 수정 불가능한 객체). 값으로 전달된 경우 함수는 값의 복사본에 대해 작동하며 원래 값에 영향을 주지 않습니다. 참조로 전달된 경우 함수는 불변 참조로 전달된 경우 원래 값을 수정할 수 있으며 함수는 필드에서 작동할 수 있습니다. 객체이지만 객체 자체를 수정하지는 않습니다. 이 세 가지 방법은 다양한 시나리오에 적합합니다. 예를 들어 값 전달은 읽기 전용 작업에 적합하고, 참조 전달은 수정 작업에 적합하며, 불변 참조 전달은 구조/배열의 필드 작업에 적합합니다.
Go 함수 매개변수 전달 메커니즘
Go 언어에서 함수 매개변수는 세 가지 주요 방식으로 전달됩니다.
값으로 전달
값으로 매개변수를 전달하면 매개변수 값의 복사본이 전달됩니다. 이 값을 수정하면 원래 값이 아닌 함수 내의 복사본에만 영향을 미칩니다.
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
作为一个按值传递的切片。这意味着该函数将收到 items
rrreee
calculateTotalCost
함수가 있다고 가정해 보겠습니다. 해당 함수는 항목 목록에 따라 총 비용을 계산하는 것입니다. 🎜rrreee🎜이 경우 items
는 값별로 조각으로 전달됩니다. 이는 함수가 원본 조각을 수정하지 않고 items
변수의 복사본을 수신한다는 의미입니다. 🎜위 내용은 Golang 함수 매개변수는 어떻게 전달되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!