go 반복문과 조건문

최준호·2022년 10월 31일
0

Go

목록 보기
4/9
post-thumbnail

📗 반복문

📄 for

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

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를 입력해주면 무한루프가 된다.

📗 조건문

📄 if

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를 사용하는 구간이 어디까지인지 알수 없는 코드인것에 반해 바로 위의 코드는 조건문을 위해서만 만들어진 변수임을 바로 알 수 있다.

📄 switch

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 문법을 작성할 수 있게된다.

profile
해당 주소로 이전하였습니다. 감사합니다. https://ililil9482.tistory.com

0개의 댓글