>  기사  >  백엔드 개발  >  Golang 배열 전송에 대한 자세한 설명

Golang 배열 전송에 대한 자세한 설명

藏色散人
藏色散人앞으로
2020-11-23 14:59:363937검색

golang 튜토리얼 칼럼에서는 Golang에서 배열을 전달하는 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Golang 배열 전송에 대한 자세한 설명

Golang 배열 전송에 대한 자세한 설명

오늘은 Golang 배열 전송에 대한 자세한 설명을 여러분과 함께 공유할 것입니다. 내용이 꽤 좋다고 생각해서 이제 공유하겠습니다. 좋은 참조 가치가 있습니다. 필요한 친구는 편집자를 따라 살펴보세요

개념 소개

배열 및 슬라이스

배열은 번호가 매겨진 고정 길이 데이터 항목 시퀀스의 집합입니다. 동일한 고유 유형입니다. 어레이 길이는 최대 2Gb이며 값형이다. 슬라이스는 연속된 배열 조각에 대한 참조이므로 슬라이스는 참조 유형입니다.

값으로 전달 및 참조로 전달

Go 언어에서 함수의 매개변수를 전달하는 방법에는 값으로 전달 및 참조로 전달하는 두 가지 방법이 있습니다. Go에서는 기본적으로 값별 전달을 사용하여 매개변수를 전달합니다. 즉, 매개변수의 복사본을 전달합니다. 함수에서 복사본의 값이 변경되더라도 원래 변수는 영향을 받지 않습니다.

참조에 의한 전달은 실제로 "값에 의한 전달"이라고 할 수 있지만 복사본은 주소의 복사본이므로 이 값이 가리키는 주소의 값을 수정할 수 있습니다.

Go 언어에서는 함수 호출 시 기본적으로 참조 유형(슬라이스, 맵, 인터페이스, 채널)이 참조로 전달됩니다.

배열 전달 시 단점

일반적으로 포인터 전달은 복사본 전달보다 비용이 적게 들며, 특히 배열이 특히 큰 경우에는 더욱 그렇습니다. 구체적인 이유는 다음과 같습니다.

값 전송에는 초기 배열의 전체 복사본이 필요하며 이 복사본을 스택에 넣기 때문에 실행 시간이 많이 소모되므로 값 전송 방법이 상대적으로 비효율적입니다.

초기 배열을 복사하려면 추가 메모리 공간(스택의 메모리)이 필요합니다.

컴파일러는 초기 배열을 복사하기 위해 코드의 일부를 구체적으로 생성해야 하므로 프로그램이 더 커집니다.

피하는 방법

위에 소개된 것처럼 두 가지 방법이 있습니다. 첫 번째 방법은 참조로 전달하는 것입니다. 두 번째 방법은 슬라이스를 사용합니다. 왜냐하면 슬라이스는 참조 유형이고 기본적으로 참조로 전달되기 때문입니다. .

포인터를 사용하여 전달

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(&arr))
}
func sum(arr *[5]int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}

슬라이스를 사용하여 전달

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(arr[:]))
}
func sum(arr []int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}

마지막 방법이 일반적으로 더 일반적입니다.

위 내용은 Golang 배열 전송에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 zzvips.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제