package main
import (
"fmt"
)
func main() {
array(5, 4, 3, 2, 1)
}
func array(numbers ...int) int {
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
return 1
}
다른 언어를 학습했다면 일반적으로 사용하던 for문은 다음과 같이 작성할 수 있다.
range는 go에서 for문을 배열의 크키만큼 순회하도록 도와준다.
package main
import (
"fmt"
)
func main() {
array(5, 4, 3, 2, 1)
}
func array(numbers ...int) int {
for number := range numbers {
fmt.Println(number)
}
return 1
}
다음을 실행하면
다음과 같은 결과를 확인할 수 있는데. 그 이유는 go는 index를 먼저 반환해주기 때문이다. 그럼 값을 출력해보자
package main
import (
"fmt"
)
func main() {
array(5, 4, 3, 2, 1)
}
func array(numbers ...int) int {
for index, number := range numbers {
fmt.Print(index, " ")
fmt.Println(number)
}
return 1
}
아직 string을 배우진 않았지만 다음과 같이 코드를 작성하면
다음 결과를 확인할 수 있다. 만약 index가 필요 없다면
package main
import (
"fmt"
)
func main() {
array(5, 4, 3, 2, 1)
}
func array(numbers ...int) int {
for _, number := range numbers {
fmt.Println(number)
}
return 1
}
다음과 같이 _
로 값을 무시하여 필요 없는 메모리 낭비를 줄일 수 있다.
range는 java나 javascript에서 사용하던 forEach와 비슷하다고 생각하면 편할거 같다.
package main
import (
"fmt"
)
func main() {
loop()
}
func loop() {
fmt.Println("무한 루프 시작")
for true {
}
fmt.Println("무한 루프 종료")
}
만약 무한루프를 돌게끔 하고 싶다면 다음과 같이 for의 조건에 true를 입력해주면 무한루프가 된다.
package main
import (
"fmt"
)
func main() {
fmt.Println(canIDrink(16))
}
func canIDrink(age int) bool {
if age < 18 {
return false
}
return true
}
다음과 같이 age에 따라 술을 마실지 검사하는 조건을 짜보았다. 여기서 go만이 사용할 수 있는 부분을 생성해보자.
예를 들어 한국에서는 나이가 외국보다 좀더 많아진다 이 값을 +2
라는 고정값으로 두고 계산하도록 만들어보자.
package main
import (
"fmt"
)
func main() {
fmt.Println(canIDrink(16))
}
func canIDrink(age int) bool {
koreanAge := age + 2
if koreanAge < 18 {
return false
}
return true
}
일반적으로는 다음과 같이 코드를 짤수 있다. 조건문 이전에 한국 나이를 계산해주는 변수를 만들고 그 값으로 값을 체크하는 것이다. 하지만 go에서는 좀더 깔끔한 코드를 작성할 수 있도록 도와주는데
package main
import (
"fmt"
)
func main() {
fmt.Println(canIDrink(16))
}
func canIDrink(age int) bool {
if koreanAge := age + 2; koreanAge < 18 {
return false
}
return true
}
다음과 같이 조건문 안에 ;
를 통해 변수 값을 미리 지정해둘 수 있는 것이다. 위 코드와 동일하게 작동하지만 위 코드의 경우 koreanAge를 사용하는 구간이 어디까지인지 알수 없는 코드인것에 반해 바로 위의 코드는 조건문을 위해서만 만들어진 변수임을 바로 알 수 있다.
package main
import (
"fmt"
)
func main() {
fmt.Println(zeroOrOne(0))
}
func zeroOrOne(number int) string {
switch number {
case 0:
return "zero"
case 1:
return "one"
}
return "bad request"
}
일반적인 switch처럼 작성도 가능하고
package main
import (
"fmt"
)
func main() {
fmt.Println(zeroOrOne(1))
}
func zeroOrOne(number int) string {
switch {
case number == 0:
return "zero"
case number == 1:
return "one"
}
return "bad request"
}
다음과 같이도 작성이 가능하다.
이제 go에서만 작성이 가능한 switch는 위에 if와 동일하게 변수를 먼저 지정할 수 있다는 것인데
package main
import (
"fmt"
)
func main() {
fmt.Println(zeroOrOne(1))
}
func zeroOrOne(number int) string {
switch badNumber := number + 2; badNumber {
case 0:
return "zero"
case 1:
return "one"
}
return "bad request"
}
조건문에 다음과 같이 변수를 미리 선언해서 사용하게 되면
go에서만 사용할 수 있는 switch 문법을 작성할 수 있게된다.