Golang Syntax _2
5. 반복문
package main import "fmt" func main() { sum := 0 for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) }
- Go에선 반복엔 for만이 존재하며 while 은 사용하지 않는다.
- for 반복문은 C와 유사하지만 소괄호는 사용하지 않는다. 하지만 실행문을 위해선 중괄호가 필요하다.
for sum < 2000 { ... }
C처럼 전, 후처리문을 제외한 조건문만을 사용할 수 있다. (while과 유사하다.)for { ... }
무한 루프의 경우 아무 조건을 작성하지 않으면 된다.
6. 조건문
package main import ( "fmt" "math" ) func sqrt(x float64) string { if x < 0 { return sqrt(-x) + "i" } return fmt.Sprint(math.Sqrt(x)) } func main() { fmt.Println(sqrt(2), sqrt(-4)) }
- for(반복문)과 유사하게 조건의 소괄호 ( ) 을 사용하지 않으며, 실행문을 위한 중괄호 { }가 필요하다.
다만 C 와 다른점은 실행문이 한줄뿐이더라도 반드시 중괄호{ } 가 필요하다. if v := math.Pow(x, n); v < lim{ ... }
if의 조건문 앞에 짧은 문장을 실행 할 수 있다.- if의 짧은 명령문에서 선언된 변수는
else if, else
구문에서도 사용할 수 있다.package main import ( "fmt" "math" ) func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else if v == lim { fmt.Printf("%g == %g\n", v, lim) } else { fmt.Printf("%g >= %g\n", v, lim) } // can't use v here, though return lim } func main() { fmt.Println( pow(3, 2, 10), pow(3, 3, 27), ) }
7. 연습문제[src]
7-1 함수와 루프의 사용법을 익히는 간단한 연습으로, 제곱근 함수를 뉴턴의 방법(Newton’s method)을 이용하여 구현합니다.
여기서 뉴턴의 방법이란 초기값 z를 선택한 후에 다음의 공식을 이용하여 반복적으로 Sqrt(x) 함수의 근사값을 찾아가는 방법을 말합니다:
z = z - (z * z - x) / (2 * z)
처음에는 계산을 10번만 반복하여 여러분이 작성한 함수가 다양한 값들 (1, 2, 3, …)에 대하여 얼마나 정확한 값을 찾아내는지 확인합니다.7-2 루프의 조건을 수정하여 값이 더이상 바뀌지 않을 때 (혹은 아주 작은 차이가 발생할 때) 루프를 종료하도록 합니다. 이렇게 하면 반복문의 실행 횟수가 어떻게 달라지는지 확인합니다. 결과값이 math.Sqrt함수의 값과 얼마나 비슷한가요?
package main import ( "fmt" "math" ) func Sqrt(x float64) float64{ var a, z, c float64 = 0, 1, 0 for a = 1; a < 10; a++ { if math.Abs(z - c) > 1e-10 { c = z z = z - (z * z - x)/(2*z) } else { break } } return z } func main() { fmt.Println(Sqrt(2)) }