Go 언어에는 함수 매개변수를 전달하는 두 가지 주요 방법이 있습니다. 값 전달: 변수 복사본을 전달하면 호출 코드의 원래 변수에 영향을 주지 않습니다. 포인터 전달: 변수의 주소를 전달하면 함수가 호출 코드의 원래 변수를 직접 수정할 수 있습니다.
Go 언어의 매개변수 전달 방법 살펴보기
Go 언어에서 함수 매개변수 전달의 주요 방법은 값 전달입니다. 값으로 전달한다는 것은 원래 변수 자체가 아닌 변수의 복사본을 함수에 전달하는 것을 의미합니다. 이 메커니즘은 함수가 자신을 호출하는 코드의 변수를 실수로 수정하지 않도록 보장합니다.
값으로 전달
값으로 전달은 =
연산자를 사용하여 변수 복사본을 만듭니다. 다음 코드 블록에서 fum()
함수는 n
변수의 복사본을 인수로 받아들입니다. =
运算符来创建变量的副本。在下面的代码块中,fum()
函数接受 n
变量的副本作为参数:
func fum(n int) { n += 1 } func main() { n := 10 fum(n) fmt.Println(n) // 输出:10 }
即使 fum()
函数增加了 n
的值,main()
函数中 n
的原始值也不会受到影响。
指针传递
在某些情况下,可能需要函数修改调用它的代码中的变量。为了实现这一点,Go 语言提供了一种称为指针传递的机制。指针传递将变量的地址传递给函数,而不是副本。
func fumP(n *int) { // 使用 `*n` 间接访问变量 *n += 1 } func main() { n := 10 fumP(&n) fmt.Println(n) // 输出:11 }
在上面的代码块中,fumP()
函数接收变量 n
的指针作为参数。指针传递允许函数通过解引用指针 (*n
) 直接修改 n
变量。
实战案例
考虑以下字符排序函数:
func sortChars(s []rune) { // 在值传递的情况下,对 s 的排序不会影响 main 中的原 slice } func main() { s := []rune("Hello World") sortChars(s) fmt.Println(s) // 输出:["H", "e", "l", "l", "o", " ", "W", "o", "r", "d"] }
在这个例子中,sortChars()
函数使用值传递接收 s
slice 的副本。因此,对副本的排序不会影响 main()
函数中 s
rrreee
fum()
함수 추가 main()
함수의 n
값과 n
의 원래 값은 영향을 받지 않습니다. 포인터 전달
경우에 따라 함수를 호출하는 코드에서 변수를 수정해야 할 수도 있습니다. 이를 달성하기 위해 Go 언어는 포인터 전달이라는 메커니즘을 제공합니다. 포인터 전달은 변수의 주소를 복사본이 아닌 함수에 전달합니다. 🎜rrreee🎜위 코드 블록에서fumP()
함수는 변수 n
에 대한 포인터를 매개변수로 받습니다. 포인터 전달을 사용하면 함수가 포인터(*n
)를 역참조하여 n
변수를 직접 수정할 수 있습니다. 🎜🎜🎜실용 예🎜🎜🎜다음 문자 정렬 함수를 고려하세요. 🎜rrreee🎜이 예에서 sortChars()
함수는 값을 사용하여 s
슬라이스의 복사본을 받습니다. 통과하다. 따라서 복사본을 정렬해도 main()
함수에 있는 s
의 원래 값에는 영향을 미치지 않습니다. 🎜🎜🎜결론🎜🎜🎜Go 언어는 값 전달과 포인터 전달이라는 두 가지 매개변수 전달 방법을 제공합니다. 우발적인 변수 수정을 방지하고 올바른 코드 동작을 달성하려면 이러한 방법을 이해하는 것이 중요합니다. 🎜위 내용은 Go 언어의 매개변수 전달 방법 연구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!