>  기사  >  백엔드 개발  >  Go 언어의 매개변수 전달 방법 연구

Go 언어의 매개변수 전달 방법 연구

WBOY
WBOY원래의
2024-04-03 14:48:02742검색

Go 언어에는 함수 매개변수를 전달하는 두 가지 주요 방법이 있습니다. 값 전달: 변수 복사본을 전달하면 호출 코드의 원래 변수에 영향을 주지 않습니다. 포인터 전달: 변수의 주소를 전달하면 함수가 호출 코드의 원래 변수를 직접 수정할 수 있습니다.

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() 函数中 srrreee

fum() 함수 추가 main() 함수의 n 값과 n의 원래 값은 영향을 받지 않습니다.

포인터 전달

경우에 따라 함수를 호출하는 코드에서 변수를 수정해야 할 수도 있습니다. 이를 달성하기 위해 Go 언어는 포인터 전달이라는 메커니즘을 제공합니다. 포인터 전달은 변수의 주소를 복사본이 아닌 함수에 전달합니다. 🎜rrreee🎜위 코드 블록에서 fumP() 함수는 변수 n에 대한 포인터를 매개변수로 받습니다. 포인터 전달을 사용하면 함수가 포인터(*n)를 역참조하여 n 변수를 직접 수정할 수 있습니다. 🎜🎜🎜실용 예🎜🎜🎜다음 문자 정렬 함수를 고려하세요. 🎜rrreee🎜이 예에서 sortChars() 함수는 값을 사용하여 s 슬라이스의 복사본을 받습니다. 통과하다. 따라서 복사본을 정렬해도 main() 함수에 있는 s의 원래 값에는 영향을 미치지 않습니다. 🎜🎜🎜결론🎜🎜🎜Go 언어는 값 전달과 포인터 전달이라는 두 가지 매개변수 전달 방법을 제공합니다. 우발적인 변수 수정을 방지하고 올바른 코드 동작을 달성하려면 이러한 방법을 이해하는 것이 중요합니다. 🎜

위 내용은 Go 언어의 매개변수 전달 방법 연구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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