Programming/golang2024. 2. 8. 11:03

어우.. 문법이 이해하기 좀 빡세네?

c에서 goto는 해당 위치로 간다는게 직관적이었지만 golang에서 break, continue는 딱 와닫지 않는다.

 

특히나 예제에서 2중 루프를 돌리면 해당 라벨로 점프하는 느낌이 아니라

nested loop만 빠져나가는 것 같은데 어떻게 이해해야하려나?

반대로.. 해당 루프를 continue 하는거니까, 내부 loop를 break 하는걸로 이해하면 되나?

var err error
timeout := time.After(30 * time.Second)

sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt)

complete := make(chan error)
go launchProcessor(complete)

Loop:
    for {
        select {
        case <-sigChan:
           atomic.StoreInt32(&shutdownFlag, 1)
           continue

        case <-timeout:
            os.Exit(1)

        case err = <-complete:
            break Loop
        }
    }

return err

 

    guestList := []string{"bill", "jill", "joan"}
    arrived := []string{"sally", "jill", "joan"}

CheckList:
    for _, guest := range guestList {
        for _, person := range arrived {
            fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

            if person == guest {
                fmt.Printf("Let %s In\n", person)
                continue CheckList
            }
        }
    }

[링크 : https://www.ardanlabs.com/blog/2013/11/label-breaks-in-go.html]

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit17/01]

 

goto는 한 함수 내에서 label이 유효하여 아래와 같이 다른 함수를 넘나들순 없게 구성되었다고 한다.

c와의 차이점이라고 해야하나..

package main

import "fmt"

func main() {
learnGoTo()
}

func learnGoTo() {
fmt.Println("a")
goto FINISH
fmt.Println("b")

}

func test() {
FINISH:
fmt.Println("c")
}

[링크 : https://golangbyexample.com/goto-statement-go/]

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit18]

'Programming > golang' 카테고리의 다른 글

golang switch  (0) 2024.02.08
golang switch - fallthrough  (0) 2024.02.08
golang import  (0) 2024.02.07
golang iota  (0) 2024.02.07
golang echo session check  (0) 2024.02.06
Posted by 구차니