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이 사용되지 않는다는 건가요?
흥미로운 질문입니다. 이 질문에 대답하려면 이 바둑 튜토리얼과 같은 규칙을 알아야 합니다 https://go.dev/tour/flowcontrol/12
延迟调用的参数会立即计算,但直到周围函数返回时才会执行函数调用。
.
예제 1: 지정된 메모리 주소에 있는 값을 인쇄하도록 defer 함수에 지시합니다.
으아아아출력은 2가 됩니다.
예 2: defer 함수에 지정된 값을 인쇄하도록 지시합니다.
으아아아출력은 1이 됩니다.
위 내용은 함수를 연기하기 위해 포인터를 전달하는 것이 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!