>  기사  >  백엔드 개발  >  Golang의 매개변수 전달 방법

Golang의 매개변수 전달 방법

巴扎黑
巴扎黑원래의
2017-09-09 11:07:052262검색

매개변수 전달이란 프로그램 전송 과정에서 실제 매개변수가 매개변수 값을 해당 형식 매개변수에 전달한 후 데이터 처리 및 반환 과정을 함수에서 구현하는 것을 의미합니다. 필요한 Golang 친구들은 매개변수 전달에 대한 관련 정보를 참조할 수 있습니다.

머리말

이 글은 주로 Golang 매개변수 전달에 대한 관련 내용을 소개하며, 참고 및 학습을 위해 공유합니다. 아래에서는 자세히 설명하지 않겠습니다. 자세한 소개를 살펴보겠습니다.

매개변수 전달과 관련하여 Golang 문서에 다음 문장이 있습니다.

평가된 후 호출의 매개변수가 값으로

함수에 전달되고 호출된 함수가 실행을 시작합니다.

매개변수 함수 호출은 모두 포인터나 참조가 아닌 값으로 전달됩니다. 매개변수 변수가 포인터이거나 암시적 포인터 유형일 때 매개변수 전달 방법도 값(포인터 자체의 복사본)에 의한 것이라는 테스트를 통해 도출되었습니다.

Slice는 가장 일반적으로 사용되는 데이터 구조 중 하나입니다. Golang의 매개변수 전달 메커니즘을 설명하기 위한 예로 Slice를 사용합니다.

Slice 데이터 구조는 다음과 같습니다.

샘플 코드:


package main

import "fmt"

func main(){
 slice := make([]int, 3, 5)
 fmt.Println("before:", slice)
 changeSliceMember(slice)
 fmt.Println("after:", slice)
}

func changeSliceMember(slice []int) {
 if len(slice) > 1 {
 slice[0] = 9
 }
}

함수 실행 결과는 다음과 같습니다.

befor:[0 0 0]
after:[9 0 0]


설명:

데이터 구조 다이어그램에서 볼 수 있듯이 Slice는 기본 배열의 첫 번째 요소 주소, 배열 len 및 슬라이스 객체가 전달하는 용량의 세 가지 필드를 포함하는 구조 유형으로 이해될 수 있습니다. 매개변수 값 전송 과정에서 세 필드의 값, 실제로는changeSliceMember 함수의 슬라이스 메모리 주소가 main의 슬라이스 메모리 주소와 다르지만 필드 값은 동일합니다. 첫 번째 필드 포인터의 값은 기본 배열의 첫 번째 요소 주소이므로 요소 내용을 직접 변경할 수 있습니다.

이해하기 위해 다음 코드와 비교할 수 있습니다.

package main

func main() {
 value := new(int)
 modifyFunc(value)
 println("main:", value)
}

func modifyFunc(value *int) {
 value = nil
 println("modifyFunc:", value)
}


실행 결과:

modifyFunc: 0x0
main: 0xc820049f30

값이 포인터로 전달되더라도 main 값에서는 변수 값이 변경되지 않았음을 알 수 있습니다. main의 값과 동일하지만 두 개체 자체가 두 개체입니다. 독자는 자세히 이해할 수 있습니다

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

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