제공된 코드 조각에서 채널 c는 make() 함수를 사용하여 생성되고 sum 함수에 전달됩니다. . 질문이 생깁니다. 명시적 포인터가 생성되지 않았음에도 불구하고 채널이 Go에서 참조에 의해 암시적으로 전달됩니까?
답은 make()의 고유한 동작에 있습니다. 기술적으로 make()가 힙에 메모리를 할당하고 장면 뒤에 포인터가 생성되므로 채널이 복사됩니다. 그러나 이 포인터 유형은 노출되지 않으며 참조 유형과 유사합니다.
Go 사양에 따르면:
"내장 함수 make는 유형 T를 사용하며 이는 슬라이스여야 합니다. 맵 또는 채널 유형, 선택적으로 유형별 표현식 목록이 옵니다. T(*T 아님) 유형의 값을 반환합니다."
make()를 사용하면 채널이 초기화되어 참조 유형으로 사용할 수 있습니다. 따라서 기본 데이터를 복제하지 않고도 전달할 수 있습니다.
요약하면 채널은 make를 사용하여 생성될 때 Go에서 참조로 효과적으로 전달됩니다. 이는 슬라이스, 맵, 포인터 및 함수와 같은 다른 데이터 구조에도 적용됩니다. 반면에 기본 데이터 유형(숫자, 부울) 및 변경 가능한 구조체는 함수에 전달될 때 복사됩니다.
위 내용은 Go에서 채널이 참조로 전달되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!