>  기사  >  백엔드 개발  >  함수를 연기하기 위해 포인터를 전달하는 것이 작동하지 않습니다.

함수를 연기하기 위해 포인터를 전달하는 것이 작동하지 않습니다.

WBOY
WBOY앞으로
2024-02-13 12:24:09609검색

将指针传递给 go defer 函数不起作用

PHP 프로그래밍에서 go defer 함수에 전달되면 포인터가 작동하지 않을 수 있습니다. PHP의 포인터는 변수의 메모리 주소를 저장하는 데 사용됩니다. 포인터를 전달하면 함수 내에서 원래 변수의 값을 수정할 수 있습니다. 하지만 go defer 함수에 포인터를 전달할 때 원래 변수를 수정할 수 없는 경우가 가끔 발생합니다. 이는 go defer 함수가 실행될 때 새로운 고루틴을 생성하고 포인터가 다른 메모리 공간을 가리킬 수 있어 변수 값을 올바르게 수정하지 못하기 때문일 수 있습니다. 따라서 PHP 프로그래밍에서는 예상치 못한 문제를 피하기 위해 주의해서 함수를 연기하도록 포인터를 전달해야 합니다.

질문 내용

내 코드에서는 numaddr을 사용하여 defer 문 이후의 num 변화를 기록하려고 합니다

으아아아

근데 주소 대신 num 是 1 而不是 2,为什么 defer 函数使用 *numaddr값이 나온다고요?

그럼 다른 방법을 시도해보겠습니다

으아아아

이번엔 작동해서 num 是 2,所以我想也许 defer fmt.printf(something) 선언하면 바로 문자열이 저장되고 defer 함수가 실제로 실행될 때는 numaddr이 사용되지 않는다는 건가요?

Solution

흥미로운 질문입니다. 이 질문에 대답하려면 이 바둑 튜토리얼과 같은 규칙을 알아야 합니다 https://go.dev/tour/flowcontrol/12

延迟调用的参数会立即计算,但直到周围函数返回时才会执行函数调用。.

예제 1: 지정된 메모리 주소에 있는 값을 인쇄하도록 defer 함수에 지시합니다.

으아아아

출력은 2가 됩니다.

예 2: defer 함수에 지정된 값을 인쇄하도록 지시합니다.

으아아아

출력은 1이 됩니다.

위 내용은 함수를 연기하기 위해 포인터를 전달하는 것이 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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