집중 과정 파트 VIII 이동: if, switch 및 for

11948 단어 goprogrammingbeginners

만약에



프로그래밍에서 종종 우리는 특정 문장을 조건부로 실행해야 합니다. 대부분의 프로그래밍 언어에는 if 라는 아이디어가 있습니다.

var x = 10
if x > 5 {
    fmt.Println("x is greater than 5")
}


이 예에서는 값이 10인 변수x가 있습니다. 그런 다음 x가 5보다 큰지 확인합니다. 그렇다면 무언가를 인쇄합니다. 그렇지 않으면 우리는 아무것도 하지 않습니다.

이면 - 그렇지 않으면 - 그렇지 않으면



종종 우리는 하나 이상의 관련 항목을 확인합니다. FizzBuzz 문제의 예를 들어보겠습니다. 임의의 숫자 n에 대해 n이 3으로 나눌 수 있으면 Fizz, n이 5로 나눌 수 있으면 Buzz, n이 3과 5로 나눌 수 있으면 FizzBuzz, 3으로 나눌 수 없으면 n을 인쇄하고 싶습니다. 또는 5.

if n%15 == 0 {
    fmt.Println("FizzBuzz")
} else if (n % 5) == 0 {
    fmt.Println("Buzz")
} else if (n % 3) == 0 {
    fmt.Println("Fizz")
} else {
    fmt.Println(n)
}


원하는 만큼 if-else를 연결할 수 있습니다. else는 조건 연산자가 필요 없는 특별한 경우입니다. if - else if 조건이 일치하지 않는 경우와 일치합니다.

함수에서 else 분기를 건너뛰는 것은 거의 항상 가능합니다. 예를 들어

func isEven(n int) bool {
    if n%2 == 1 {
        return false
    }
    return true
}


else 블록을 사용하는 대신 기본 케이스를 반환할 수 있습니다.

진술과 함께라면



때때로 우리는 방금 생성한 변수의 일부 조건을 확인하고 조건에 대한 변수만 필요합니다. 예제는 이것을 좀 더 명확하게 하는 데 도움이 될 수 있습니다.

func minRand(min int) int {
    rand.Seed(time.Now().UnixNano())
    if v := rand.Int(); v > min {
        return v
    }
    return min
}


난수v가 있고 v가 min보다 크면 v, 그렇지 않으면 min를 반환합니다. if 조건 외부에서 v에 액세스할 필요가 없습니다. 이것은 가독성과 변수 이름 지정에 도움이 됩니다. 이동 중에 다른 유형의 변수를 재정의할 수 없습니다. 동일한 범위의 모든 변수가 있는 큰 함수에서는 문제가 발생할 수 있습니다.

을 위한



프로그래밍에서 우리는 때때로 무언가를 여러 번 수행해야 합니다. 루프를 사용하여 이를 달성합니다. Go는 반복을 위한 단 하나의 구조를 가지고 있습니다. for 키워드입니다. 그러나 for는 다른 언어에서처럼 do-while , while 와 같은 다른 것이 필요하지 않은 go에서 꽤 다재다능합니다.

의 해부학



일반적으로 for 루프는 다음과 같은 구조를 가지고 있습니다.

for i := 0; i < 100; i++ {
}


루프 불변을 초기화하는 초기화가 있습니다. 그런 다음 루프를 종료하는 데 사용되는 조건이 있고 각 루프 반복 후에 실행되는 변경 사항이 있습니다.

이 세 가지는 모두 선택 사항이며 필요에 따라 사용하거나 생략할 수 있습니다.

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

for i := 0; ; {
    if i >= 5 {
        break
    }
    fmt.Println(i)
    i++
}

i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

i = 0
for ; ; i++ {
    if i >= 5 {
        break
    }
    fmt.Println(i)
}

for i := 0; i < 5; {
    fmt.Println(i)
    i++
}

i = 0
for ; i < 5; i++ {
    fmt.Println(i)
}

for i := 0; ; i++ {
    if i >= 5 {
        break
    }
    fmt.Println(i)
}

i = 0
for {
    if i >= 5 {
        break
    }
    fmt.Println(i)
    i++
}


이들은 모두 단일 불변이 있는 for 루프의 가능한 조합입니다. 이 모든 for 루프는 똑같은 일을 합니다.

부서지다


for 실행의 어느 지점에서나 break 문을 사용하여 가장 가까운 for 루프에서 벗어날 수 있습니다.

루프에 대한 다중 불변



두 개의 변수가 있는 for 루프도 사용할 수 있습니다.

for i, j := 0, 10; i != j; i, j = i+1, j-1 {
    fmt.Println(i, j)
}


기본 구조는 동일합니다. ij 초기화하는 init가 있습니다. 조건을 chechi != j한 다음 증가i 및 감소j합니다.

영원히



종료 조건 없이 for 루프를 실행하면 for 루프를 영원히 실행합니다. 프로세스를 무기한 실행하고 싶을 때가 있습니다.

for{
// do work indefinitely 
}


예를 들어 net/http의 소스 코드를 보면 서버에 대한 새로운 연결을 기다리는 무한 for 루프의 예를 볼 수 있습니다.

다음 단계



이것은 바둑 단기집중과정 시리즈의 8부입니다.

좋은 웹페이지 즐겨찾기