Golang 혼합 할당 및 선언의 변수 섀도잉
Go에서 := 연산자를 사용하면 값을 할당할 때 예기치 않은 동작이 발생할 수 있습니다. 변수. 동시 선언과 할당이 가능하지만 변수 섀도잉이 발생할 수도 있습니다.
변수 섀도잉
:=가 내부 범위 내 기존 변수와 함께 사용되는 경우, 새로운 값과 유형이 해당 변수와 연관됩니다. 이는 원래 변수가 해당 범위 내에 효과적으로 숨겨짐을 의미합니다.
데모
a := 1 { a, b := 2, 3 } // This code will result in a compiler error because 'a' is already declared in the outer scope.
이 예에서 내부 범위는 변수 a를 다시 선언하려고 시도합니다. 외부 범위에 이미 선언되어 있습니다. 이는 허용되지 않으므로 컴파일러 오류가 발생합니다.
솔루션
변수 섀도잉을 방지하는 방법에는 여러 가지가 있습니다.
일관되지 않은 동작
이 문제는 범위 없이 내부 범위에서 변수를 선언할 때 반대 방향으로 발생할 수도 있습니다. 깨닫다 it.
데모
if _, err := fmt.Println(n); err != nil { panic(err) } // This code will result in a compiler error because 'err' is undefined.
이 예에서는 err 변수가 선언되었지만 내부 범위에서 초기화되지 않았습니다. 그러나 외부 범위에서는 초기화될 것으로 예상합니다.
솔루션
혼합 할당 및 선언
혼합 할당 및 선언의 경우 새 범위가 생성되지 않습니다. 따라서 섀도우잉이 발생하지 않습니다.
데모
a := 1 fmt.Println(&a) a, b := 2, 3 fmt.Println(&a) // This code will print the same address for 'a' in both cases.
이 예에서는 변수 b를 선언하고 동시에 값을 할당하는 동시에 기존의 값을 할당합니다. 변수 a가 변경되었습니다. a의 주소는 동일하게 유지되어 섀도잉이 발생하지 않았음을 나타냅니다.
위 내용은 Go의 혼합 할당 및 선언에서 변수 섀도잉이 어떻게 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!