이 글에서는 Golang의 switch 및 select 사용법을 주로 소개합니다. 이 글에서는 샘플 코드를 통해 switch 문 및 select 문 사용법을 자세히 소개합니다. 이는 모두에게 필요한 참고 자료입니다. 친구 여러분, 편집자를 따라와 함께 배워보세요.
이 글은 주로 Golang의 switch 및 select 사용법에 대한 내용을 소개합니다. 자세한 소개를 살펴보겠습니다.
1. switch 문 다중 분기 조건부 실행 방법을 제공합니다. 각 케이스에는
expression
var name string ... switch name { case "Golang": fmt.Println("Golang") case "Rust": fmt.Println("Rust") default: fmt.Println("PHP是世界上最好的语言") }
Go는 표현식이 스위치 표현식과 일치하는 것으로 확인되는 한 각 케이스 문의 케이스 표현식을 위에서 아래로 평가합니다. 동일하면 사례 설명이 선택됩니다. 나머지 사례 설명은 무시됩니다. if와 마찬가지로 switch 문에도 초기화 단어가 포함될 수 있으며 그 모양과 작성은 완전히 동일합니다.
names := []string{"Golang","java","PHP"} switch name:=names[0];name { case "Golang": fmt.Println("Golang") ... default: fmt.Println("Unknown") }
2 Type switch 문
type switch 문과 일반 문에는 두 가지 차이점이 있습니다. 형태. 첫 번째 요점은 case 키워드 뒤에 오는 것이 표현식이 아니라 유형 지정자라는 것입니다. 유형 지정자는 여러 유형 리터럴로 구성되며 여러 유형 리터럴은 쉼표로 구분됩니다. 두 번째 요점은 스위치 표현이 매우 특별하다는 것입니다. 이 특수 표현식은 유형 주장의 역할도 하지만 해당 표현식은 v.(type)
처럼 매우 특별합니다. 여기서 v는 인터페이스
유형 값입니다. 이 유형의 표현식은 type switch 문에만 나타날 수 있으며 스위치 표현식으로만 사용될 수 있습니다. type switch 문의 예는 다음과 같습니다.
v.(type)
, 其中v必须代表一个接口类型的值。该类表达式只能出现在类型switch语句中,且只能充当switch表达式。一个类型switch语句的示例如下:
v := 11 switch i := interface{}(v).(type) { case int, int8, int16, int32, int64: fmt.Println("A signed integer:%d. The type is %T. \n", v, i) case uint, uint8, uint16, uint32, uint64: fmt.Println("A unsigned integer: %d. The type is %T. \n", v, i) default: fmt.Println("Unknown!") }
我们这里把switch表达式的结果赋给了一个变量。如此以来,我们就可以在该switch语句中使用这个结果了。这段代码被执行后,输出:"A signed integer:11. The type is int.
ch1 := make (chan int, 1) ch2 := make (chan int, 1) ... select { case <-ch1: fmt.Println("ch1 pop one element") case <-ch2: fmt.Println("ch2 pop one element") }여기서는 스위치 표현식의 결과를 변수에 할당합니다. 이런 방식으로 이 결과를 switch 문에 사용할 수 있습니다. 이 코드가 실행된 후 출력은 다음과 같습니다: "
부호 있는 정수:11. 유형은 int입니다.
" 2. Select 문
예:
timeout := make(chan bool, 1) go func() { time.Sleep(time.Second * 10) timeout <- true }() select { case <-pssScanResponseChan: case <-timeout: fmt.PrintIn("timeout!") }Select의 코드 형식은 Switch의 코드 형식과 매우 유사하지만 Select의 경우 작업 문은 [IO 작업]만 가능합니다.
다음과 같이
ch1 := make (chan int, 1)
ch2 := make (chan int, 1)
select {
case <-ch1:
fmt.Println("ch1 pop one element")
case <-ch2:
fmt.Println("ch2 pop one element")
default:
fmt.Println("default")
}
타임아웃 시간이 만료되면 케이스2가 성공적으로 작동합니다. 따라서 select 문은
exit
select 문에 기본값이 포함된 경우:
ch := make (chan int, 1) ch <- 1 select { case ch <- 2: default: fmt.Println("channel is full !") }이때 ch1과 ch2가 모두 비어 있으므로 case1과 case2 모두 성공적으로 읽히지 않습니다. 그런 다음 선택은 기본 문을 실행합니다.
는 다음과 같습니다.
flag := false for { select { case <-pssScanResponseChan: continue default: flag = true } if true == flag { break } }1을 삽입할 때 ch가 이미 꽉 찼기 때문입니다. ch가 2를 삽입하려고 할 때 ch가 꽉 찬 것을 발견하면(case1이 차단됨) select가 기본 문을 실행합니다. 이런 방식으로 항상 기다리지 않고 채널이 가득 찼는지 여부를 감지할 수 있습니다.
此外,利用default特性,我们可以使用select语句将chan清空,如下:
flag := false for { select { case <-pssScanResponseChan: continue default: flag = true } if true == flag { break } }
위 내용은 Golang에서 switch문과 select문의 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!