English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
함수Golang은 특정 작업을 수행하고 호출자에게 결과를 반환하는 문장 집합입니다. 함수는 결과를 반환하지 않고 특정 작업을 수행할 수도 있습니다. Golang은 함수에 파라미터를 전달하는 두 가지 방식을 지원합니다.값 전달 또는 값 호출또는참조 전달 또는 참조 전달기본적으로 Golang은 함수에 파라미터를 전달할 때 값을 호출하는 방식을 사용합니다.
함수에 파라미터를 전달하는 기본 용어:
함수에 전달되는 파라미터는 실제 파라미터라고 합니다.
함수가 받는 파라미터는 형식 파라미터라고 합니다.
이 파라미터 전달에서, 실제 파라미터의 값은 함수의 형식 파라미터에 복사되며, 두 가지 유형의 파라미터는 다른 저장 위치에 저장됩니다. 따라서 함수 내에서 수행된 모든 변경은 호출자의 실제 파라미터에 반영되지 않습니다.
예제1:아래 프로그램에서는 Z의 값이 Modify 함수를 통해 변경되지 않는 것을 볼 수 있습니다.변경。
package main import "fmt" // 값 변경 func modify(Z int) { Z = 70 } func main() { var Z int = 10 fmt.Printf("함수 호출 전, Z의 값은 = %d", Z) //값 호출 modify(Z) fmt.Printf("\n함수 호출 후, Z의 값은 = %d", Z) }
출력:
함수 호출 전, Z의 값은 = 10 함수 호출 후 Z의 값은 = 10
예제2:아래 프로그램에서는 값을 교환할 수 없습니다. 왜냐하면 값을 호출하는 호출입니다.
package main import "fmt" //값을 교환하는 함수 func swap(x, y int) int { //임시 변수를 가져옵니다 var tmp int tmp = x x = y y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("함수 호출 전의 값\n") fmt.Printf("f = %d and s = %d\n", f, s) swap(f, s) fmt.Printf("\n함수 호출 후의 값\n") fmt.Printf("f = %d and s = %d", f, s) }
출력:
함수 호출 전의 값 f = = 700 and s = 900 함수 호출 후의 값 f = = 700 and s = 900
여기서는포인터(지시자)의 개념. 풀참조 연산자*주소를 가리키는 연산자&를 사용하여 얻을 수 있습니다. 실제 매개변수와 형식 매개변수는 동일한 위치를 가리키며, 따라서 함수 내에서 이루어지는 모든 변경은 호출자의 실제 매개변수에 반영됩니다.
예제1:함수 호출 중, 변수의 주소를 전달하고, 풀참조 연산자를 사용하여*값을 변경합니다. 따라서 함수 내에서의 모든 변경은 호출자의 실제 매개변수에 반영됩니다.Modify 이후변경된 값을 찾을 수 있습니다.
package main import "fmt" // 값을 변경하는 함수 func modifydata(Z *int) { *Z = 70 } func main() { var Zz int = 10 fmt.Printf("함수 호출 전 Zz의 값은 = %d", Zz) //Z의 주소를 참조 호출로 전달 modifydata(&Zz) fmt.Printf("\n함수 호출 후 Zz의 값은 = %d", Zz) }
출력:
함수 호출 전 Zz의 값은 = 10 함수 호출 후 Zz의 값은 = 70
예제2:참조 호출을 사용하여 값을 교환할 수 있습니다. 예를 들어.
package main import "fmt" //값을 교환하는 함수,정수를 가리키는 포인터 func swap(x, y *int) int { //임시 저장 변수 var tmp int tmp = *x *x = *y *y = tmp return tmp } func main() { var f int = 700 var s int = 900 fmt.Printf("함수 호출 전의 값\n") fmt.Printf("f = %d 과 s = %d\n", f, s) //참조 호출을 통해 //변수 주소 전달 swap(&f, &s) fmt.Printf("\n함수 호출 후의 값\n") fmt.Printf("f = %d 과 s = %d", f, s) }
출력:
함수 호출 전의 값 f = = 700 과 s = 900 함수 호출 후의 값 f = = 900 과 s = 700