>  기사  >  백엔드 개발  >  `go`를 사용하여 새 고루틴을 생성할 때 기본 고루틴에서 `input.Text()`가 평가되는 이유는 무엇입니까?

`go`를 사용하여 새 고루틴을 생성할 때 기본 고루틴에서 `input.Text()`가 평가되는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-16 13:18:03832검색

Why is `input.Text()` evaluated in the main goroutine when creating a new goroutine with `go`?

메인 고루틴에서 input.Text()가 평가되는 이유

go 키워드를 사용하여 새 고루틴을 생성할 때 함수의 매개변수와 인수가 동시에 평가됩니다. go 문은 고루틴이 실제로 실행되기 시작할 때가 아니라 실행됩니다. 이는 매개변수 또는 인수로 사용되는 모든 변수 또는 표현식이 기본 고루틴에서 평가된다는 것을 의미합니다.

제공된 예제에서 함수 HandleConn은 go 키워드를 사용하여 고루틴으로 호출됩니다. 이 함수는 네트워크 연결을 나타내는 net.Conn 객체를 참조하는 단일 인수 c를 사용합니다. handlerConn 함수 내에서 c 연결을 사용하여 bufio.Scanner가 생성되고 연결의 입력을 읽기 위해 스캐너에서 Scan 메서드가 반복적으로 호출됩니다.

루프 내에서 Scan 메서드가 호출됩니다. 입력 스캐너 및 연결에서 읽은 텍스트 줄은 Text 메서드를 사용하여 액세스됩니다. input.Text() 표현식은 기본 고루틴 내에서 평가되고, 텍스트는 Scan 메서드의 결과로 handlerConn 고루틴에 반환됩니다.

이 특정 예에서 HandleConn 고루틴은 go echo( c, input.Text(), 1*time.Second) 입력 텍스트를 클라이언트에 다시 에코하는 새로운 고루틴을 생성합니다. input.Text()는 기본 고루틴에서 평가되기 때문에 input.Text() 및 1*time.Second의 값은 echo 고루틴이 실행되기 시작할 때가 아니라 go 문이 실행될 때 결정됩니다.

위 내용은 `go`를 사용하여 새 고루틴을 생성할 때 기본 고루틴에서 `input.Text()`가 평가되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.