2014-10-13 3 views
0

질문이 있습니다. 백그라운드에서 프로그램을 실행해야합니다. 이 프로그램은 내 데이터베이스에 데이터를 수집하고 저장하는 것입니다. 무한 반복 - 함수가 참을 반환합니다.

내가 그렇게 시작 :

func main() { 
    for { 
     doAll() 
    } 
} 

그리고 한 번 ("이동"기능)에서 모든 주소에서 데이터를 검색합니다

func doAll() { 
    rows, err := MySQL.QueryRow("SELECT * FROM `settings`") 
    checkError(err) 
    defer rows.Close() 
    for rows.Next() { 
     c := make(chan bool) 

     var http string 

     err = rows.Scan(&http) 
     checkError(err) 

     go doOne(http) 
     <- c 
    } 
} 

그리고 그 하나 개의 웹 사이트에서 데이터를 검색합니다.

func doOne() { 
    // some code 
    c <- true 
} 

제 질문은 "doAll"기능의 반복 여부입니다.

답변

0

c 채널이 버퍼링되지 않기 때문에 doAll의 반복이 순서대로 수행됩니다. 즉, for rows.Next() 루프에서 c의 읽기는 채널에 쓸 때까지 doOne까지 기다립니다.

채널을 제거하고 doOne을 동 기적으로 실행하면이 코드를 더 간단하게 만들 수 있습니다 (즉, 이것을 함수로 부름). 이 방법으로 리팩토링 된 코드는 정확히 동일한 의미를 갖습니다.