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 중국어 웹사이트의 기타 관련 기사를 참조하세요!