>백엔드 개발 >Golang >Go to 함수에서 참조 및 값으로 전달

Go to 함수에서 참조 및 값으로 전달

王林
王林앞으로
2024-02-12 23:21:10592검색

在 Go to 函数中通过引用和值传递

PHP 개발에서 Go to 함수는 프로그램의 흐름을 제어하는 ​​데 사용할 수 있는 매우 일반적으로 사용되는 함수입니다. Go to 함수를 사용할 때 매개변수를 전달하는 방법에는 참조와 값이라는 두 가지 방법이 있습니다. 매개변수가 참조로 전달되는 경우 함수 내부의 매개변수를 수정하면 함수 외부의 변수 값에 영향을 미칩니다. 매개변수가 값으로 전달되는 경우 함수 내부의 매개변수를 수정해도 함수 외부의 변수 값에는 영향을 미치지 않습니다. 따라서 함수를 작성할 때 예상되는 프로그램 논리를 달성하려면 실제 필요에 따라 적절한 매개변수 전송 방법을 선택해야 합니다. 이 글에서는 독자들이 이 중요한 PHP 기능을 더 잘 이해하고 적용할 수 있도록 Go to 함수에서 참조 및 값으로 전달하는 사용법과 차이점을 자세히 소개하겠습니다.

질문 내용

go에서 참조와 값을 전달하는 것이 조금 혼란스럽습니다.

문자 앞의 *에 대한 설명을 봤습니다.

으아악

이건 말도 안 돼요.

Java에서는 데이터베이스 인스턴스를 함수에 전달하면 이렇게 합니다.

으아악

근데 go 예시에서는 이렇게 넘겼어요.

으아악

문자 앞에 별표가 필요한 이유는 무엇인가요?

이 치트 시트를 보고 알게 되었습니다.

으아악

왜 포인터 주소만 매개변수로 보내려는지 이해가 되지 않습니다.

Solution

우선 go는 기술적으로 값 전달만 합니다. 개체에 포인터를 전달할 때 개체를 참조로 전달하는 것이 아니라 값으로 포인터를 전달합니다. 차이점은 미묘하지만 때로는 관련이 있습니다. 예를 들어, 이를 역참조하고 가리키는 메모리를 덮어쓰는 대신 호출자에게 영향을 주지 않는 포인터 값을 덮어쓸 수 있습니다.

으아악

"유형 앞에 별표가 필요한 이유는 무엇입니까?"라는 질문에 대해: 별표는 값이 유형 sql.db 类型的指针,而不是 sql.db 값을 가리키고 있음을 의미합니다. 이것들은 서로 바꿔 사용할 수 없습니다!

포인터 주소를 보내는 이유는 무엇인가요? 이 방법을 사용하면 함수 호출자와 함수 본문 간에 값을 공유할 수 있고 함수 내부의 변경 사항이 호출자에 반영됩니다(예: 포인터는 "setter" 메서드가 개체에 대해 작동할 수 있는 유일한 방법입니다) . 이는 실제로 Java 코드가 수행하는 작업이기도 합니다. Java에서는 항상 참조(포인터)를 통해 객체에 액세스하므로 Java는 이를 명시적으로 표시하는 대신 자동으로 수행합니다. 하지만 이동 중에는 포인터를 통해 객체에 접근할 수도 있으므로 명시적으로 접근해야 합니다. 함수를 호출하고 객체를 직접 전달하면 함수는 객체의 복사본을 가져오고 함수가 객체를 수정하면 호출자는 해당 변경 사항을 볼 수 없습니다. 따라서 변경 사항을 함수 외부로 전파하려면 포인터를 전달해야 합니다. 이렇게 하면 포인터가 복사되지만 포인터가 가리키는 개체는 공유됩니다.

참조:

포인터에 대한 섹션 둘러보기, 포인터에 대한 사양 섹션으로 이동, 주소 연산자에 대한 사양 섹션으로 이동

위 내용은 Go to 함수에서 참조 및 값으로 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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