> 백엔드 개발 > Golang > golang에서 채널을 닫는 방법

golang에서 채널을 닫는 방법

青灯夜游
풀어 주다: 2023-01-11 11:12:23
원래의
2726명이 탐색했습니다.

golang에서는 close() 함수를 사용하여 채널을 닫을 수 있으며 구문은 "close(msg_chan)"입니다. 채널(chan)은 시스템 리소스이므로 chan을 사용할 필요가 없는 경우에는 내장된 close 기능을 사용하여 수동으로 파이프를 닫아야 합니다. 참고: 닫힌 파이프로 데이터를 보내면 프로그램이 패닉 상태가 됩니다.

golang에서 채널을 닫는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어의 채널(chan)도 시스템 리소스이므로 chan을 사용할 필요가 없으면 수동으로 파이프를 닫아야 합니다. 파이프를 닫으려면 시스템에 내장된 닫기 기능을 사용해야 합니다.

close()는 내장 함수이며 더 이상 값이 채널로 전송되지 않음을 나타내는 플래그를 설정합니다.

close(msg_chan)
로그인 후 복사
ParametersDescription
msg_chan닫아야 할 파이프입니다.

for range 루프를 사용하여 채널을 닫을 수도 있습니다. 여기서 수신자 고루틴은 주어진 구문을 사용하여 채널이 열려 있는지 닫혀 있는지 확인할 수 있습니다:

ele, ok:= <- Mychannel
로그인 후 복사

여기서 ok 값이 true이면 채널이 열려 있으므로 읽기 작업을 수행할 수 있음을 의미합니다. . 그리고 값이 false이면 채널이 닫혀 있으므로 읽기 작업이 수행되지 않음을 의미합니다.

Explanation

  • 변수를 사용하여 파이프라인에서 반환된 데이터를 수락한 후 두 번째 부울 유형 반환 값은 파이프라인이 닫혔는지 여부를 나타냅니다. false인 경우 파이프라인이 닫혔음을 나타냅니다.

채널 닫는 예

//Go程序说明如何
//关闭使用的通道
//range循环和关闭函数
package main

import "fmt"

func myfun(mychnl chan string) {

    for v := 0; v < 4; v++ {
        mychnl <- "nhooo"
    }
    close(mychnl)
}

func main() {

    //创建通道
    c := make(chan string)

    // 使用 Goroutine
    go myfun(c)

    //当ok的值为为true时,表示通道已打开,可以发送或接收数据
    //当ok的值设置为false时,表示通道已关闭
    for {
        res, ok := <-c
        if ok == false {
            fmt.Println("通道关闭 ", ok)
            break
        }
        fmt.Println("通道打开 ", res, ok)
    }
}
로그인 후 복사

golang에서 채널을 닫는 방법

닫힌 파이프로 데이터를 보내면 프로그램이 패닉 상태가 됩니다.

package main
import "fmt"
func main() {
	fmt.Println("嗨客网(www.haicoder.net)")
	ch := make(chan string, 5)
	ch <- "Hello"
	ch <- "HaiCoder"
	ch <- "Python"
	close(ch)
	ch <- "Close"
}
로그인 후 복사

golang에서 채널을 닫는 방법

파이프를 닫은 후 다시 닫힌 파이프를 사용하여 "Close"” 메시지에서 프로그램을 실행한 후 프로그램이 패닉 상태임을 확인합니다. 즉, 닫힌 파이프가 데이터를 다시 보낼 수 없습니다. 그렇지 않으면 프로그램이 패닉 상태가 됩니다.

【관련 추천: Go 비디오 튜토리얼, 프로그래밍 교육

위 내용은 golang에서 채널을 닫는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿